簡體   English   中英

使用特定路徑和命名空間連接到Socket.IO服務器

[英]Connect to Socket.IO server with specific path and namespace

我的Node.js應用程序在URL http://www.example.com/myapp/上運行。

我已經配置了一個帶有自定義命名空間的Socket.IO服務器(版本1.3.5)。 這是一個示例代碼段:

var server = http.createServer(...);
var io = socketio(server);
io
    .of('/a/b/c')
    .on('connection', function (socket) {
        socket.emit('update', {msg: '/a/b/c'});
    });

我無法弄清楚如何從客戶端連接到此服務。 我的猜測(這些都不起作用):

io.connect('http://www.example.com/myapp/a/b/c');
io.connect('http://www.example.com', {path: '/myapp/a/b/c'});
io.connect('', {path: '/myapp/a/b/c'});
io.connect('http://www.example.com/a/b/c', {path: '/myapp'});
io.connect('http://www.example.com', {path: '/myapp/socket.io/a/b/c'});

在您的服務器上,不要忘記也指定路徑:

var io  = require('socket.io')(http, { path: '/myapp/socket.io'});

io
.of('/my-namespace')
.on('connection', function(socket){
    console.log('a user connected with id %s', socket.id);

    socket.on('my-message', function (data) {
        io.of('my-namespace').emit('my-message', data);
        // or socket.emit(...)
        console.log('broadcasting my-message', data);
    });
});

在您的客戶端上,不要混淆名稱空間和路徑:

var socket = io('http://www.example.com/my-namespace', { path: '/myapp/socket.io'});

我在一個Angular單頁面應用程序中也使用1.3.5,在一個稍微類似的場景中,socket.io的客戶端代碼只是與應用程序的其余部分(來自bower包)連接,而不是下載/包含在特定的網絡位置。

在我的socket.io所在的設置中,似乎對我有用的是:

http://somedomain.com:9096/sockets/socket.io.js

而不是默認值:

http://somedomain.com:9096/socket.io/socket.io.js

(我手動調整了服務器端的路徑),是:

io.connect('http://somedomain.com:9096' + '/' + namespaceName, { path: '/sockets' });

它看起來與您的場景相同:

io.connect('http://www.example.com/a/b/c', {path: '/myapp'});

這可能值得再試一次。 我沒有用它中的正斜杠完全測試namespaceName ,但它似乎在客戶端獲取連接,當我只是將我的命名空間更改為'/a/b/c'

可能與眾不同的是我的服務器端設置,其中包括:

var server = http.createServer(app);
var io = require('socket.io')(server, { path: '/sockets' }).listen(server);

我的回答更多的是一般性的指示,即盡管設置不明顯,但可以同時使用命名空間和自定義路徑。 我希望它在某種程度上對你有用。

您可以查看房間和命名空間的官方文檔。 基本上,關於socket.io是,一旦客戶端請求客戶端源,它將傳輸客戶端連接到服務器所需的所有必要細節(主機,路徑,端口等)。

要連接到您的特定命名空間,您只需在客戶端指定:

var socket = io('/a/b/c');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM