2016-07-13 2 views
1

Я начал простой проект express + socket.io. На сервере я зарегистрировался в событии «connection» сокета и после этого отправлю сообщение клиенту. Это хорошо работает.Сервер, не получающий сообщение socket.io клиента

Когда я получаю сообщение с клиентской стороны с сервера, в этом обработчике событий я делаю socket.emit ('message', 'some text');

Это сообщение не поступает на сервер. Я знаю, что это должно быть очень просто, и поэтому я думаю, что я пропустил что-то глупое. Любая помощь приветствуется.

код сервера:

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

app.get('/', function (req, res) { 
    res.sendfile('index.html'); 
}); 

io.on('connection', function (socket) { 
    console.log('a user connected'); 
    io.emit('server-message', 'hello socket.io server'); 
}); 

io.on('message', function(message) { 
    console.log(message); 
}); 

код клиента:

window.socket = io.connect('http://localhost:3000'); 

socket.on('server-message', function (message) { 
      console.log(message); 
      socket.emit('message', 'hello socket.io from browser'); 
     }); 

ответ

2

Похоже io.emit('server-message', 'hello socket.io server'); должен быть изменен на socket.emit('server-message', 'hello socket.io server'); Затем вы должны переместить следующее в слушателем connection события:

io.on('message', function(message) { 
    console.log(message); 
}); 

и изменить его на

socket.on('message', function(message) { 
    console.log(message); 
}); 
+0

Вы открыли мне глаза! я не понял, где я могу получить объект сокета на сервере. Затем я немного искал и обнаружил, что у этого события есть «соединение», и там должна быть сделана подписка. благодаря! –

+0

Мне было интересно, почему вы изменили io.on на socket.on, а затем поняли, что аргумент из 'io.on ('connection', function (socket)' именно поэтому. Я не знаю почему, но это wasn «Совершенно очевидно из документов, даже если это правильно там. Похоже, это обычная ошибка для noobs, но очень трудно найти ответ, если вы не понимаете, как он работает. – wordsforthewise