現在のセットアップがあります:
したがって、/ nodejs /で始まるリクエストは8888のnodejs Webサーバーにリダイレクトされます。
それ以外は、ポート3000のRailsサーバーにリダイレクトされます。
現在、Socket.ioにはio.connectの接続URLが必要です。
/ nodejs/socket.io/socket.io.jsは有効であり、必要なsocket.ioクライアントjsを返すことに注意してくださいとしょうかん。
ただし、サーバーでconnection_urlを/ nodejs /に指定することはできません。
http://myapp.com/nodejs およびその他の亜種を試しましたが、次のURLで404エラーが表示されます http://myapp/socket.io/1/ ?t = 1331851089106
Socket.ioバージョン1では、リソースはパスに置き換えられました。つかいます :
var socket = io('http://localhost', {path: '/nodejs/socket.io'});
次のようにリソースを指定できます。
var socket = io.connect('http://localhost', {resource: 'nodejs'});
デフォルトではresource = "socket.io"
Nodejsでexpressを使用している場合:
サーバ側:
var io = require('socket.io')(server, {path: '/octagon/socket.io'});
それから
io.on('connection', function(socket) {
console.log('a user connected, id ' + socket.id);
socket.on('disconnect', function() {
console.log('a user disconnected, id ' + socket.id);
})
})
socket.on('publish message ' + clientId, function(msg) {
console.log('got message')
})
クライアント側:
var socket = io('https://dev.octagon.com:8443', {path: '/octagon/socket.io'})
それから
socket.emit('publish message ' + clientId, msg)
この目標を達成するために、以下のアプローチを使用します。
クライアント側:
var socket = io.connect('http://localhost:8183/?clientId='+clientId,{"force new connection":true});
サーバ側:
var io = require('socket.io').listen(server);
io.sockets.on('connection', function(socket) {
console.log("url"+socket.handshake.url);
clientId=socket.handshake.query.clientId;
console.log("connected clientId:"+clientId);
});
参照: https://github.com/LearnBoost/socket.io/wiki/Authorizing#global-authorization
Expressでアプリを提供している場合は、これを確認できます。 Expressはhttpを使用してアプリケーションを提供することを忘れないでください。
const express = require('express'),
http = require('http'),
socketIo = require('socket.io'),
app = express()
var server = http.createServer(app);
var io = socketIo(server);
io.on('connection', (socket)=>{
// run your code here
})
server.listen(process.env.PORT, ()=> {
console.log('chat-app inintated succesfully')
})