等待 10 秒后,我无法通过 websocket 连接到我自己的端口http://localhost:1100上的服务器 ,它在浏览器控制台中出现错误
'wss://tel.buy-tires.ru:1100/' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT
javascript代码
<script>
var socket= new WebSocket('ws://tel.buy-tires.ru:1100/');
socket.onopen = function() {
console.log("Соединение установлено.");
};
</script>
服务器在端口 1100 上有一个服务器套接字。如果您使用 sudo lsof -i 命令监听所有端口,它会给出
TCP localhost:1100 (LISTEN)
尝试配置nginx
location /ws/ {
proxy_pass http://localhost:1100;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
在此服务器上运行的套接字客户端可以与 ip localhost 端口 1100 上的套接字服务器正常通信
我要求管理员在 pfsense 上打开端口 1100 - 他们打开了它。
在以管理员身份通过 telnet 启动的 Windows 命令行中,我在端口 80 上进行了监听 - 连接已建立,但无法爬升至 1100。这是我第一次遇到这种设置,我阅读了很多文章-实际上,我所做的所有操作都是从那里采取的。我不知道该怎么做。
17.08.2017
感谢@D-side,我明白了为什么不能监听来自外部的传入连接,因为我没有地址因为地址,但是按照nginx的设置,我不得不联系
var socket= new WebSocket('ws://tel.buy-tires.ru/ws/');
现在服务器看到有一个到套接字的连接,但由于某种原因,浏览器 websocket 没有看到我放入套接字缓冲区的消息 - 服务器以 http 标头形式的响应 - 经过长时间的等待,nginx代码生成的header 502来了,虽然我发的是101
我也不需要 nginx 欺骗的 INCOMING 标头,所以我将设置简化为
location /ws/ {
proxy_pass http://localhost:1100;
}
当我切断套接字服务器时,网络套接字等待响应 - 它立即反应连接断开
我花了一周的时间每天 8 小时与 web-socket-server 建立浏览器连接,因为我从来没有遇到过这种情况。为了帮助像我这样的人,我会将那些对初学者并不明显的发现提供给那些第一次遇到它们的人以寻求帮助和理解。
1 不要打扰服务器端口,尤其是防火墙。套接字服务器指定要在环回上打开哪个端口就足够了,又名 localhos,又名 127.0.0.1。
重要提示:端口 1 到 1024 由操作系统保留 - 最好不要触摸它们。分别从 1025 到 65500 个端口供您使用
2 Nginx 设置应该是最小的
基本上3条主线。
重要规则:
保存配置后,确保您没有弄乱 nginx 配置的语法 - 在控制台中运行命令
如果它说好的然后重新启动nginx
实际上,这足以接收来自 Internet 的传入信号。
如果你在控制台中的浏览器出现500错误,那么你就是在网上敲错了地址。我敢说,如果您的浏览器出现错误 502、301、302、200,那么这是套接字服务器中的错误代码,它也是 web-socket-server。在这种情况下,从小处着手 - 将标头发送到浏览器并检查编码 - 只有 UTF-8 才可能没有 BOM
如果在那之后浏览器会发誓其他事情,那么你就在正确的轨道上并且已经向浏览器发送了 101 响应代码!我还建议查看您的套接字服务器发送的标头。在此处写下您的观察...
这是来自网络部分的 Google-Chrome 浏览器(启用 - 按 F12 并转到网络选项卡并刷新页面)
碰巧您错误地关闭了端口,即 您想再次启动套接字服务器,控制台会告诉您该端口已在使用中。要查看哪个进程正在使用此端口,请运行命令
就我而言,我正在侦听端口 1100
并在命令中释放我们驱动的端口
在我的例子中,13905 是挂在服务器处理器上并使用端口的服务器进程的 PID,在我的例子中是端口 1100,-9 参数意味着我们正在向处理器发送命令以终止进程
为了方便关闭服务器,我使用了一个带有shutdown server socket 命令的socket 客户端。
为了通过 web-socket 与浏览器完全建立连接,您需要向浏览器的请求发送一个 http 标头,其中包含浏览器的全面信息,即
如何生成加密的
$responce_key
?答: 要做到这一点,您需要从标头“Sec-WebSocket-Key: \n\r” http 请求中获取 - web-socket 发送给您的密钥并使用函数对其进行处理
然后,当然,“云”会突然跳舞:)
为了让 web-socket-server 能够理解浏览器发送给它的任何信息,在成功的“握手”之后,web socket 服务器将需要对消息进行解码,并且为了让浏览器能够理解web-socket-server 发送了什么,数据必须以编码形式到达。功能(需要验证)
尝试例如用于 nodejs 的 socket.io(https://socket.io/)或用于 php 的棘轮(http://socketo.me/)
- 应该是这样的。在我看来,你是在野外
epoll c++
。借助我介绍的工具,你可以在1-30分钟内轻松建立101个浏览器和服务器之间的连接
可以将插座视为插入插座的插头。
通过从电路中移除插头或插座,您将断开电路。
在套接字编程中,类似地,如果您删除服务器部分,您将在客户端收到连接错误(即,客户端部分将查找节点)
如果您删除客户端部分,则服务器会收到来自的断开连接事件客户端(客户端可以为此事件断开连接)