web-dev-qa-db-fra.com

URL de connexion Socket.io?

J'ai la configuration actuelle: 

  1. Nodejs Proxy (exécutant http-reverse-proxy) s'exécutant sur le port 80. 
  2. Serveur Rails s'exécutant sur le port 3000 
  3. Serveur Web Nodejs s'exécutant sur le port 8888

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

Est-il possible de dire à io.connect de préfixer chaque URL de connexion avec/nodejs /?

31
disappearedng

A partir de Socket.io version 1, ressource a été remplacée par chemin. Utilisation :

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

Voir: http://blog.seafuj.com/migrating-to-socketio-1-0

39
supershnee

vous pouvez spécifier une ressource comme ceci:

var socket = io.connect('http://localhost', {resource: 'nodejs'});

par défaut resource = "socket.io"

12
Sirian

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)
5
zer0Id0l

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

3
Neo

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')
})
0
Fillipo Sniper