2012-04-09 3 views
4

Я только что установил эти nodejs и socket.io, но у меня возникают проблемы с подключением клиента к серверу.NodeJS и Socket.io

В моем сервере у меня есть:

var http = require('http'); 
http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hello World\n'); 
}).listen(3000, 'localhost'); 
console.log('Server running at http://localhost:3000/'); 

var io = require('socket.io').listen(3000); 

io.sockets.on('connection', function (socket) { 

    socket.emit('Hi.') ; 

}); 

И на моем клиенте:

<script src="/socket.io/socket.io.js"></script> 
<script> 
var socket = io.connect('http://localhost:3000'); 

socket.on('connect', function() { 
    socket.emit('set nickname', confirm('What is your nickname?')); 
    socket.on('ready', function() { 
    console.log('Connected !'); 
    socket.emit('msg', confirm('What is your message?')); 
    }); 
}); 

Я получаю много ошибок в Chrome инспектора:

GET http://localhost:9261/socket.io/socket.io.js 404 (Not Found) 
Uncaught ReferenceError: io is not defined 

ответ

2

вы не обслуживающая клиента через nodeJS, это не будет работать:

<script src="/socket.io/socket.io.js"></script> 

попробуйте использовать вместо этого:

<script src="http://localhost:3000/socket.io/socket.io.js"></script> 
+0

Я пробовал это, я больше не получаю 404, просто требую и io не определен. – imperium2335

+0

Вы уверены, что установили socket.io? вы должны открыть терминал, перейдите в тот же каталог, что и ваш сервер, а затем напишите «npm install socket.io» –

+0

им, используя окна, я использовал командную строку для установки в моей текущей папке приложения (im using dreamweaver), установленный сокет .io в папку node_modules, поэтому каталог выглядит так: F: \ xampp \ htdocs \ mySite \ node_modules \ socket.io – imperium2335

2

Кажется, что вы заканчивая только «Hello World» клиенту, а не html с кодом клиента.

Ваш код сервера должен выглядеть следующим образом (от http://socket.io/#how-to-use):

var app = require('http').createServer(handler) 
    , io = require('socket.io').listen(app) 
    , fs = require('fs') 

app.listen(80); 

function handler (req, res) { 
    fs.readFile(__dirname + '/index.html', 
    function (err, data) { 
    if (err) { 
     res.writeHead(500); 
     return res.end('Error loading index.html'); 
    } 

    res.writeHead(200); 
    res.end(data); 
    }); 
} 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

Ваш клиентский код должен быть в index.html. Кроме того, убедитесь, что у вас есть папка с именем socket.io, который содержит сценарий socket.io.js

+0

I прошли через это пару раз, но я все еще не могу заставить его работать.У меня теперь есть ошибки: Uncaught ReferenceError: require не определен Uncaught ReferenceError: io не определен – imperium2335

+0

«require not defined» - похоже, что вы используете require на стороне клиента (что неверно). Как вы используете сервер? – mihai

+0

Из командной строки с использованием команды: node server.js, она работает нормально, без ошибок. – imperium2335

1

Невозможно подключиться, так как ваш клиент не может найти socket.io.js , который вы можете решить, используя соответствующий файл, из node_modules \ socket.io \ node_modules \ socket.io-client \ dist, использующего сокет , io.js и поместите его в свой локальный каталог и используйте его в теге скрипта.

0

отметить также, что при переходе на производство код в клиенте должен быть обновлен:

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

Чтобы что-то вроде

var socket = io.connect('my_host'); 

Я послал my_host на стороне клиента сценария с страницу, где я загружаю socket.io, извлекая параметры req.headers.host, поэтому для меня это выглядит так:

io.connect('http://' + host) 

Вы можете выставить переменные на стороне клиента через express-expose.

0

Это, вероятно, потому, что io не был надлежащим образом экземпляр, таким образом Uncaught ReferenceError: ИО не определен

// Instantiate without argument 
var io = require('socket.io')(); 
// Instantiate with new keyword 
var Server = require('socket.io') 
    , io = new Server(); 

// Instantiate io server with app as argument 
var app = require('http').createServer(handlerFunc) 
    , io = require('socket.io')(app); 
app.listen(80); 

// Attaching socket.io with express server 
var app = express() 
    , server = require('http').createServer(app) 
    , io = require('socket.io')(server); 
server.listen(80, handlerFunc); 
1

<script src="http://localhost:3000/socket.io/socket.io.js"></script>var socket = io.connect("http://localhost:3000");

для этого пути клиента, подключенного к узлу server.This будет работать