0

在创建 WS 服务器的过程中,我看到了很多挂钩 http 服务器的示例,或多或少类似于以下内容

var server = http.createServer(function(request, response) {
  // process HTTP request. Since we're writing just WebSockets
  // server we don't have to implement anything.
});
server.listen(1337, function() { });

// create the server
wsServer = new WebSocketServer({
  httpServer: server
});

或者

var httpServer =  http.createServer().listen(websocketport);

/*
* Hook websockets in to http server
*/

socketServer.installHandlers(httpServer, { prefix: '/websockets' });

我不明白为什么。这样做有什么好处吗?

经典的 WS 设置有什么问题,就像这样

const WebSocket = require('ws')

const wss = new WebSocket.Server({ port: 8080 })

wss.on('connection', ws => {....

为什么我不应该只使用没有 http 服务器的 WS 服务器?

4

2 回答 2

0

这完全取决于项目。

通常,您将看到的大多数示例都不是纯 websocket 服务器示例,而是假设您将 websocket 功能合并到更大的应用程序堆栈中。

如果您不需要 HTTP 服务器,那么您不应该将您的 websocket 侦听器附加到一个实例。如果您确实需要 HTTP 服务器,那么最好在以下情况下附加您的 websocket 侦听器:

  • 如果您的 HTTP 服务器和 WebSocket 侦听器在同一个域中
  • 当发出一些 HTTP 请求时,您希望能够管理或推送到您的套接字连接。
于 2019-08-27T15:25:25.537 回答
0

这很可能是因为通常您会提供一些使用 HTTP 服务器和 WS 服务器的 REST API。

如果您尝试同时为它们(HTTP 和 WS)使用相同的主机和端口,则需要将它们中的一个组合或封装到另一个中,以便它可以接受和处理这两种协议。

但是,如果您只是尝试在没有 HTTP 的情况下使用 WS,那么您可能不需要 HTTP 服务器,只需 WS 服务器即可,正如您在经典 WS 设置中所展示的那样。

另一方面,如果您只需要没有 WS 的 HTTP 服务器,那么您不需要实现 WS,只需 HTTP 服务器即可。

于 2019-08-28T02:38:47.177 回答