J'ai la configuration actuelle:
Ainsi, toute requête commençant par/nodejs/sera redirigée vers le serveur Web nodejs sur 8888.
Tout le reste sera redirigé vers le serveur Rails sur le port 3000.
Actuellement, Socket.io nécessite une URL de connexion pour io.connect.
Notez que /nodejs/socket.io/socket.io.js est valide et renvoie la bibliothèque js du client socket.io requise.
Cependant, je ne peux pas spécifier connection_url à/nodejs/sur mon serveur.
J'ai essayé http://myapp.com/nodejs et d'autres variantes, mais je reçois toujours une erreur 404 avec l'URL suivante http: //myapp/socket.io/1/? T = 1331851089106
A partir de Socket.io version 1, ressource a été remplacée par chemin. Utilisation :
var socket = io('http://localhost', {path: '/nodejs/socket.io'});
vous pouvez spécifier une ressource comme ceci:
var socket = io.connect('http://localhost', {resource: 'nodejs'});
par défaut resource = "socket.io"
Si vous utilisez express avec nodejs:
Du côté serveur:
var io = require('socket.io')(server, {path: '/octagon/socket.io'});
puis
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')
})
Côté client:
var socket = io('https://dev.octagon.com:8443', {path: '/octagon/socket.io'})
puis
socket.emit('publish message ' + clientId, msg)
J'utilise l'approche ci-dessous pour atteindre cet objectif:
côté client:
var socket = io.connect('http://localhost:8183/?clientId='+clientId,{"force new connection":true});
du côté serveur:
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);
});
référence: https://github.com/LearnBoost/socket.io/wiki/Authorizing#global-authorization
Si vous utilisez votre application avec Express, alors vous pourrez peut-être vérifier cela N'oubliez pas que Express utilise http pour servir votre application.
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')
})