将websocket与标准的http.Server整合在一起

我有一个简单的networking服务器

var http = require('http'), url = require('url'); var server = http.createServer(function (req, res) { var uri = url.parse(req.url).pathname; if (uri == '/') { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); return; } res.writeHead(404, {'Content-Type': 'text/plain'}); res.end('File not found'); }); server.listen(0, '127.0.0.1'); 

我现在想连接一个单一的path(比如说/ws )到一个websocket,但是保持服务器的其余部分不被修改。

但是, ws似乎要求我build立一个专用的服务器(包括SSL终止,安全configuration和端口分配)。

我怎样才能终止一个websocket实现的path/ws

我会推荐使用websocket包 ,它是一个

Websocket客户端和服务器库实现RFC 6455中规定的WebSocket协议。

这是我想要的,所以这就是我使用它的原因。 这是非常无痛的使用,我实际上做的wss和ws连接到html客户端使用纯JavaScript websockets node.js。

git项目是积极的,当我发布的问题,我已经在同一天的回应。 上面的链接示例显示了它的简单性:

 var WebSocketServer = require('websocket').server; var http = require('http'); var server = http.createServer(function(request, response) { console.log((new Date()) + ' Received request for ' + request.url); response.writeHead(404); response.end(); }); server.listen(8080, function() { console.log((new Date()) + ' Server is listening on port 8080'); }); wsServer = new WebSocketServer({ httpServer: server, autoAcceptConnections: false }); function originIsAllowed(origin) { // put logic here to detect whether the specified origin is allowed. return true; } wsServer.on('request', function(request) { if (!originIsAllowed(request.origin)) { // Make sure we only accept requests from an allowed origin request.reject(); console.log((new Date()) + ' Connection from origin ' + request.origin + ' rejected.'); return; } var connection = request.accept('echo-protocol', request.origin); console.log((new Date()) + ' Connection accepted.'); connection.on('message', function(message) { if (message.type === 'utf8') { console.log('Received Message: ' + message.utf8Data); connection.sendUTF(message.utf8Data); } else if (message.type === 'binary') { console.log('Received Binary Message of ' + message.binaryData.length + ' bytes'); connection.sendBytes(message.binaryData); } }); connection.on('close', function(reasonCode, description) { console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); }); }); 

但是,我应该注意到,子协议并不明显,因为没有例子。 在项目的git网站上有一些问题可以引导你朝着正确的方向发展。

你可以在你的应用程序的同一个端口上添加socket.io。 如果你想要/ wspath,那么使用:

 var io = require('socket.io').listen(httpServer, { resource: '/ws/socket.io' }); 

或者让/ws指向/ws/socket.io