Javascript NodeJS+;socket.io:简单的客户端/服务器示例不工作
我使用的是NodeJS v0.4.8和最新版本的socket.io npm安装socket.io 在Ubuntu上: Linux mars 2.6.38-8-generic#42 Ubuntu SMP周一4月11日03:31:50 UTC 2011 i686 i686 i386 GNU/Linux 不幸的是,下面的代码既不在客户端也不在服务器端生成任何输出 有人有线索吗 服务器端 客户端Javascript NodeJS+;socket.io:简单的客户端/服务器示例不工作,javascript,node.js,comet,socket.io,Javascript,Node.js,Comet,Socket.io,我使用的是NodeJS v0.4.8和最新版本的socket.io npm安装socket.io 在Ubuntu上: Linux mars 2.6.38-8-generic#42 Ubuntu SMP周一4月11日03:31:50 UTC 2011 i686 i686 i386 GNU/Linux 不幸的是,下面的代码既不在客户端也不在服务器端生成任何输出 有人有线索吗 服务器端 客户端 var socket=new io.socket(null,{port:8082,rememberTran
var socket=new io.socket(null,{port:8082,rememberTransport:true,timeout:1500});
socket.connect();
socket.on('connect',function(){
log('连接到服务器');
send('Hi Server…');
});
socket.on('message',function(){
log('收到消息!');
});
socket.on('disconnect',function(){
log('从服务器断开连接');
});
NodeJS(不是sys.put(“…”)调用)的输出是:
信息-socket.io已启动调试-
服务静态/socket.io.js调试-
客户端授权信息-握手
授权信息-握手
B61A5C2751C8C8493DB4B79D19E779
我以您的示例为例,使用express将其放到了一个节点应用程序中。您的HTML代码被放置在public下的静态HTML文件中。你的例子很好。代码如下所示。我想确保socket.io脚本文件和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(){ })
});
我也(像Derrish)喜欢使用框架来简化我的工作(AWESOME:))。您可以从下载并提取此示例。我相信您甚至不必安装这些模块,因为我已经在本地绑定了它们(只需运行),这要感谢npm:)
如何安装:
守则:
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 () {
});
});
<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>
public/index.html:
// 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 () {
});
});
<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>
已安装的模块(不需要):
浏览器将显示:
socket.io
在启动时,但您可能无法看到它,因为它将被连接的替换
已连接
当用户连接到socket.io时等待2秒代码>
var socket=io.connect('http://localhost:8081');
您可以使用下面的链接派生代码
hi@Derrish,oke,听起来还不错,谢谢。我已经将您在test.js中显示的代码放入,然后创建了一个公用文件夹,并将index.html放入该公用文件夹。当我运行“节点测试”并访问localhost:9000时,我得到一个“cannotget/”错误。从浏览器访问此示例的正确方式是什么?谢谢。我相信静态文件夹中的任何文件都需要使用URL中的完整路径进行寻址。好的,这个示例正在运行,但是我在控制台中没有得到任何输出。您是否在控制台中获得文本(“新客户端在这里,客户端已发送:…”等等)?您使用的是哪个NodeJS/Socket.io版本?我怀疑您的浏览器中没有加载Socket.io.js文件。您是否确认您的浏览器没有报告脚本错误?确保脚本标记引用了正确的路径/socket.io/socket.io.jsGreat,谢谢,您的示例正在运行。这很奇怪,但我认为这行代码:express.createServer('127.0.0.1')和显式IP(而不是“localhost”)符号解决了我的问题。非常感谢@Alfred“node app.js”命令启动我的socket.io服务器。但当我关闭终端时,服务器停止,客户端断开连接。那个么,我怎样才能使服务器始终处于开启状态而不停止呢?请不要发布仅仅是你们博客链接的答案。请参阅和此Meta Stack Overflow讨论:感谢您改进您的答案=)您可以重新添加链接,只要它不是您答案中的唯一内容(而且链接似乎是相关的)。
<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
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");
});
});
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:8081');
</script>