NodeJS + сокет.io: простой пример клиента / сервера не работает
Я использую NodeJS v0.4.8 и последняя версия сокета.io от
npm установить сокет.Ио
на Ubuntu:
Linux mars 2.6.38-8-generic #42-Ubuntu SMP Пн апр 11 03:31: 50 UTC 2011 i686 i686 i386 GNU/Linux
следующий код, к сожалению, не выдает никаких выходных данных, ни на стороне клиента, ни на стороне сервера.
есть ли у кого-нибудь ключ?
СЕРВЕРНАЯ СТОРОНА
var http = require('http'),
io = require('socket.io'),
fs = require('fs'),
sys = require('sys');
respcont = fs.readFileSync('testclient.js');
server = http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(respcont);
});
server.listen(8082);
var socket = io.listen(server);
socket.on('connection', function(client){
sys.puts("New client is here!");
client.send("hello world");
client.on('message', function(msg) { sys.puts("client has sent:"+msg); }) ;
client.on('disconnect', function() { sys.puts("Client has disconnected"); }) ;
});
КЛИЕНТСКАЯ СТОРОНА
<html>
<body>
<script type="text/javascript" src="http://localhost:8082/socket.io/socket.io.js"></script>
<script>
var socket = new io.Socket(null,{port:8082,rememberTransport:true,timeout:1500});
socket.connect();
socket.on('connect', function() {
console.log('connected to server');
socket.send('Hi Server...');
});
socket.on('message', function() {
console.log('received a message!');
});
socket.on('disconnect', function() {
console.log('disconnected from server');
});
</script>
</body>
</html>
вывод из NodeJS (не sys.ставит."(..") звонки) есть:
info-сокет.начата отладка ввода-вывода - обслуживаемые статические /socket.io.js отладка - авторизованная информация клиента-handshake уставный инфо - handshaken b61a5c2751c1c8c8493db4b79d19e779
3 ответов
Я также (как Дерриш) люблю использовать экспресс базы для упрощения моей работы(офигенно :)). Вы можете скачать и извлечь этот образец изhttp://dl.dropbox.com/u/314941/socketio.zip. Я считаю, что вам даже не нужно устанавливать эти модули, потому что я связал их локально(просто запустить) благодаря npm :).
установка:
alfred@alfred-laptop:~/tmp/socketio$ uname -a
Linux alfred-laptop 2.6.35-28-generic #50-Ubuntu SMP Fri Mar 18 19:00:26 UTC 2011 i686 GNU/Linux
alfred@alfred-laptop:~/tmp$ wget http://dl.dropbox.com/u/314941/socketio.zip
alfred@alfred-laptop:~/tmp$ unzip socketio.zip
alfred@alfred-laptop:~/tmp$ cd socketio/
alfred@alfred-laptop:~/tmp/socketio$ node -v
v0.4.7
alfred@alfred-laptop:~/tmp/socketio$ npm -v
1.0.6
alfred@alfred-laptop:~/tmp/socketio$ node app.js
в код:
app.js:
// npm install express
// npm install socket.io
var sys = require('sys'),
express = require('express'),
app = express.createServer('127.0.0.1'),
io = require('socket.io');
app.use(express.static(__dirname + '/public'));
app.get('/', function (req, res) {
res.send('Hello World');
});
app.listen(3000);
var socket = io.listen(app);
socket.on('connection', function (client){
// new client is here!
setTimeout(function () {
client.send('Waited two seconds!');
}, 2000);
client.on('message', function () {
}) ;
client.on('disconnect', function () {
});
});
public / index.HTML-код:
<html>
<p id="text">socket.io</p>
<script src="socket.io/socket.io.js"></script>
<script src="jquery-1.6.1.min.js"></script><!-- Downloaded Jquery -->
<script>
$(document).ready(function(){
var socket = new io.Socket(),
text = $('#text');
socket.connect();
socket.on('connect', function () {
text.html('connected');
});
socket.on('message', function (msg) {
text.html(msg);
});
socket.on('disconnect', function () {
text.html('disconnected');
});
});
</script>
список моих модулей:
alfred@alfred-laptop:~/tmp/socketio$ npm ls
/home/alfred/tmp/socketio
├─┬ express@2.3.11
│ ├── connect@1.4.6
│ ├── mime@1.2.2
│ └── qs@0.1.0
└── socket.io@0.6.18
установленные модули(не обязательно):
npm install express
npm install socket.io
браузер отобразит:
-
socket.io
на старте, но, вероятно, вы не можете видеть это, потому что он будет замененconnected
. -
connected
когда пользователь подключается к сокету.Ио. - после 2 секунд он будет отображать
Waited two seconds!
Экспресс 3.0 + Сокет.io рабочий пример
сервер (app.в JS )
var express = require('express');
var app = express.createServer();
var socket = require('socket.io');
app.configure(function(){
app.use(express.static(__dirname + '/'));
});
var server = app.listen(8081);
var io = socket.listen(server);
io.sockets.on('connection', function (socket) {
console.log("connnect");
socket.on('disconnect', function (socket) {
console.log("disconnect");
});
});
клиент ( индекс.html)
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:8081');
</script>
вы можете скопировать код, используя ссылку ниже https://github.com/sreekumar-kr/Expree3.0---Socket.IO
Я взял ваш пример и бросил его в приложение узла a с помощью express. Ваш HTML-код был помещен в статический HTML-файл под public. Ваш пример сработал отлично. Код показан ниже. Я хотел убедиться, что оба гнезда.файл сценария ввода-вывода и файл HTML обслуживались должным образом.
var http = require('http'),
io = require('socket.io'),
express = require('express');
var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
if (!module.parent) {
app.listen(9000);
console.log("server started at %s", (new Date()).toUTCString());
console.log("listening on port %d", app.address().port);
}
// socket.io
var socket = io.listen(app);
socket.on('connection', function(client){
console.log("New client is here!");
client.send("hello world");
client.on('message', function(msg){ console.log("client has sent:"+msg); }) ;
client.on('disconnect', function(){ console.log("Client has disconnected"); }) ;
client.on('disconnect', function(){ })
});