Pat*_*ryk 3 node.js express socket.io
我写了一个服务器的简约示例node.js,我希望得到客户端连接的控制台通知.我正在使用以下版本的模块
express@3.0.6socket.io@0.9.13 node@0.8.7所以我写了这个:
app.js
var socket = require('socket.io');
var express = require('express');
var http = require('http');
var app = express();
var server = http.createServer(app);
var io = socket.listen(server);
//var io = socket.listen(app);
io.sockets.on('connection',function(client){
console.log("Client connected...");
client.emit('messages', {hello: 'world'});
});
app.listen(8080);
Run Code Online (Sandbox Code Playgroud)
index.html
<script src="node_modules/socket.io/lib/socket.io.js"></script>
<script>
var server = io.connect("http://localhost:8080");
server.on('messages', function(data){
alert(data.hello);
});
</script>
Run Code Online (Sandbox Code Playgroud)
我的目录结构如下:
|-- app.js
|-- index.html
`-- node_modules
|-- express
| |-- bin
| |-- client.js
| |-- History.md
| |-- index.js
| |-- lib
| |-- LICENSE
| |-- Makefile
| |-- node_modules
| |-- package.json
| |-- Readme.md
| `-- test.js
`-- socket.io
|-- benchmarks
|-- History.md
|-- index.js
|-- lib
|-- LICENSE
|-- Makefile
|-- node_modules
|-- package.json
`-- Readme.md
Run Code Online (Sandbox Code Playgroud)
你的路线:
<script src="node_modules/socket.io/lib/socket.io.js"></script>
Run Code Online (Sandbox Code Playgroud)
应该换成
<script src="/socket.io/socket.io.js"></script>
Run Code Online (Sandbox Code Playgroud)
通过这样做,您直接通过socket.io的内部静态服务器而不是ExpressJS本身为客户端提供静态socket.io.js模块!
编辑1:
哦,我忘了提到如何提供index.html文件,所以基本上你需要设置
var app = express();
app.use(express.static(__dirname + '/public'));
Run Code Online (Sandbox Code Playgroud)
然后将您的index.html文件放在您的/public目录中
编辑2 :(解释)
ExpressJS通过内部静态文件处理程序提供静态文件.该行app.use(express.static(__dirname + '/public'));实际上将您传递给node.js的请求重新路由到您的公用文件夹.
另一方面,Socket.io(作为一个单独的库)有自己的方法来提供它的静态文件,并且只有包含URL的GET请求才会触发它:( /socket.io/socket.io.js尽管还有另一个闪存文件.swf,它适用于不支持的浏览器不支持Websockets
您可以从ExpressJS API和Socket.io wiki中了解更多信息.
| 归档时间: |
|
| 查看次数: |
15986 次 |
| 最近记录: |