在UNIX域套接字上监听WebSockets?

5

是否可以在nginx服务器后面设置一个WebSockets服务器,用UNIX域套接字处理连接?

我目前在同一台机器上有几个WebSocket服务器实例,存在端口共享的问题。所有实例都必须分配唯一的端口。我想避免这种情况,而是使用UNIX域套接字在nginx和WebSockets后端之间进行通信。

我正在使用的WebSockets库是ws (https://github.com/einaros/ws)

我目前像这样创建我的服务器:

var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({host: "127.0.0.1", port: 8080});
1个回答

9

服务器端:

var http = require('http');
var WebSocketServer = require('ws').Server;
var server = http.createServer()
var wss = new WebSocketServer({ server : server});
server.listen('/tmp/server.sock')

客户端:

var ws = require('ws');
var client = new ws("ws+unix:///tmp/server.sock")
client.send('hello')

https://github.com/taigaio/taiga-events(请参见index.coffee)没有使用`server.listen`调用,因此我不知道如何注入套接字。对此有什么想法吗? - qknight
我该如何通过客户端(HTML)连接到 .sock,以便从用户界面更新/发送更新? - mr.work
@mr.work,您无法从浏览器连接到Unix套接字,需要使用反向代理,使您的浏览器连接到代理,代理将请求转发到Unix套接字。 - user0103
如果你遇到 EADDRINUSE 错误,请尝试使用 fs.unlinkSync('/tmp/server.sock')。 - Jack Steam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接