【发布时间】:2017-10-13 19:36:06
【问题描述】:
我正在尝试使用 socket.io 和 express 在 node.js 中创建一个多房间聊天应用程序。我对使用服务器端口和 websocket 端口感到困惑。我了解客户端使用服务器端口连接到服务器。但不确定是否使用 websocket 端口。
感谢和问候..
【问题讨论】:
标签: node.js express socket.io chat
我正在尝试使用 socket.io 和 express 在 node.js 中创建一个多房间聊天应用程序。我对使用服务器端口和 websocket 端口感到困惑。我了解客户端使用服务器端口连接到服务器。但不确定是否使用 websocket 端口。
感谢和问候..
【问题讨论】:
标签: node.js express socket.io chat
webSockets 可以与您的 Web 服务器共享相同的端口,这是一种常见的配置。之所以可行,是因为 webSocket 如何建立连接(所有 webSocket 连接都是通过 HTTP 请求启动的)。它的工作原理是这样的:
Web 服务器看到升级请求,如果它启用了对 webSocket 连接的支持,它将以 101 请求(切换协议)和另一个与安全相关的标头进行响应。
客户端得到接受的升级,两端切换到 webSocket 协议,原来使用 HTTP 协议的 TCP 套接字现在使用 webSocket 协议。
这样,普通的HTTP请求或webSocket连接请求都可以使用同一个端口和webServer。
对于聊天应用程序,通常使用 webSocket 连接,因为它是一个持续连接,更容易让服务器直接向客户端发送信息,这在聊天应用程序中经常需要。
要了解有关 webSocket 连接和服务器如何工作的更多信息,请参阅 MDN 上的此参考:Writing WebSocket servers,其中显示了启动 webSocket 连接的分步过程。
【讨论】:
服务器套接字被服务器使用......它不断地在循环中监听即将到来的套接字请求......并且websocket向服务器套接字发送请求并绑定两个设备之间的连接......
【讨论】:
如果您有/想要有网络客户端,WebSocket 将是必需的,因为无法从基于浏览器的 JavaScript 访问“常规”TCP(或 UDP)套接字(我假设您不希望Flash、SilverLight 或 Java 小程序,2017 年)。 WebSocket 不是因为端口号而特别,而是因为协议而特别:WebSocket 连接以常规 HTTP 连接开始,然后protocol upgrade 重新配置它,它是为浏览器世界设计的,甚至能够遍历 HTTP 代理。建立连接后,提供全双工双向消息流,非常适合聊天应用。
而且由于是网络事物,如果允许的话,您可以简单地使用端口 80。
【讨论】: