Сервер Socket.io излучает не стреляя - PullRequest
3 голосов
/ 26 июня 2011

Хорошо, попробовал свои силы в NodeJS и socket.io и столкнулся с проблемой. У меня установлены и работают NodeJS и Socket.io на моем локальном хосте. В настоящее время у меня есть следующие настройки:

server.js

// Require HTTP module (to start server) and Socket.IO
var http = require('http'), io = require('socket.io');

// Start the server at port 8080
var server = http.createServer(function(req, res){ 

// Send HTML headers and message
  res.writeHead(200,{ 'Content-Type': 'text/html' }); 
  res.end('<h1>NodeJS Server Online</h1>');
});
server.listen(8080);

// Create a Socket.IO instance, passing it our server
var socketserver = io.listen(server);

// Add a connect listener
socketserver.on('connection', function(socket){ 

    socket.emit("server ready");

    socket.on('test', function (msg) {
        socket.broadcast.emit('TEST:', msg);
        console.log(msg);
    });

    socket.on('user message', function (msg) {
        socket.broadcast.emit('user message', msg);
        console.log(msg);
    });

});

client.js

$(document).ready(function() {
// Stuff to do as soon as the DOM is ready;
    var socket =  io.connect('http://localhost',{port:8080});

    socket.on('server ready',function() {
        messages.append("<li>Server Ready...</li>");
        console.log("Server Ready");
    });

    // Add a connect listener
    socket.on('connect',function() {
        messages.append("<li>Connected...</li>");
        console.log("connected");
        socket.emit('test',"Just testing");
    });

});

Сервер запускается нормально, но моя проблема в том, что server.js не запускает строку socket.emit ("server ready"); . Код на стороне клиента работает нормально, как в Terminal.app при тестировании моего сервера выводит следующую строку:

websocket received data packet 5:::{"name":"test","args":["Just testing"]}

Чего мне не хватает? Почему не работает серверная часть?

1 Ответ

4 голосов
/ 28 июня 2011

Я обновил socket.io до 0.7.2, а затем немного изменил ваш пример, чтобы использовать экспресс.Приведенный ниже код смог получить событие «сервер готов».

Узел Сервер:

var http = require('http'),  
    express = require('express');

var app = module.exports = express.createServer();

// Configuration

app.configure(function(){
  app.use(express.static(__dirname + '/public'));
});

app.listen(9000);
console.log("server started");

// socket.io 
var io = require('socket.io').listen(app);

io.sockets.on('connection', function(socket){ 
    socket.emit('server ready', {msg: 'hi'}) ;
}); 

Веб-страница (/sock.html):

<html>
<body>
<script type="text/javascript" src="/socket.io/socket.io.js"></script>
<script> 
var socket = io.connect();
socket.on('server ready', function(data){ console.log('server ready!'); }) ;
</script> 
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...