Node.js,socket.io,require()

时间:2012-08-03 12:09:48

标签: node.js socket.io

我的目标:创建将在两个Web浏览器之间发送antyhing(事件,字符串,函数调用)的node.js服务器和客户端应用程序。

我安装并创建了简单的服务器,但问题始于创建客户端。正如http://socket.io/所述,我按命令安装了它:

npm install socket.io

但是基本示例中需要的文件:

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

未下载或安装。在/node_modules/socket.id/lib中有一个名称相同的文件,但是文件是一样的吗?我认为这是socket.io客户端,但作为服务器模块,而不是网页浏览器javascript对吧?

如何获得正常工作且可以连接到node.js服务器的socket.io.js,没有像io / socket / require这样的错误没有定义等等?

我不想创建响应普通http请求的网络服务器。我希望服务器能够保持连接并且能够在两个浏览器中的JS脚本之间进行通信

我只能忍受它,每个人都在形式上写关于node.js的形式,就像世界上每个人都在每个可能的direcortory中都有socket.io.js文件。可能重复:

socket.io.js not found

以函数调用require()开头,该函数调用不在干净的JavaScript API中。所以我甚至不尝试这种解决方案。任何人都可以解释如何正确包含和定义io。*吗?这是关于Express框架的东西?为什么node.js和socket.id页面没有提到明确要求?

问题是,我需要一个CLIENT js库,我不是指“服务器上的客户端”,我的节点二进制服务器将能够连接到其他页面/服务器并进行通信。我是指HTML客户端页面中的客户端。并且,如果需要,其他实际的JS。

我在http://serv1.aelag.com:8084/

的演示中抓住了一个示例
/** Socket.IO 0.6.2 - Built with build.js */
/**
 * Socket.IO client
 * 
 * @author Guillermo Rauch <guillermo@learnboost.com>
 * @license The MIT license.
 * @copyright Copyright (c) 2010 LearnBoost <dev@learnboost.com>
 */

this.io = {
    version: '0.6.2',
...

如何以正常方式获取该文件而不是从其他服务器窃取(可能不稳定或旧版本)?我需要exaclty那个文件。有任何依赖吗?我应该通过构建它“build.js”或者开发人员来创建它吗?

3 个答案:

答案 0 :(得分:3)

我终于解决了这个问题

socket.io脚本不存在为平面文件。它是由node.js服务器生成并提供给浏览器。所以。包括它:

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

仅当node.js服务器与具有Web应用程序的Web服务器在同一端口上启动时才有效。如果您尝试从端口80上的apache加载此脚本,则需要将整个路径放到node.js服务器侦听主机:

<script src="http://localhost:8080/socket.io/socket.io.js"></script>

答案 1 :(得分:2)

您需要在任何地方添加/socket.io/socket.io.js。如果您已通过npm install socket.io安装了socket.io,则您的应用程序知道如何处理它。几个月前我自己玩socket.io,这是一个非常简单的#34;聊天&#34;我想出来并且有效。所以它可能会帮助你! (我正在使用ExpressJS。一个非常有用的Node.JS框架顺便说一句)

这是服务器端应用程序:

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

app.listen(3000);

app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function (socket) {
    socket.on('news', function (data) {
        socket.emit('news', { content: data.text });
        socket.broadcast.emit('news', { content: data.text});
    });
});

这是你的index.html

<!DOCTYPE html>
<html>
<head>
<title>socket test</title>
</head>
<body>
<input type="text" id="Username"> <input type="text" id="Content"><input type="button" value="send" onclick="sendMessage()"><br />
<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost:3000/pathtoproject');
  socket.on('news', function (data) {
    document.body.innerHTML += data.content + "<br />";
  });
  function sendMessage() {
      socket.emit('news', { text: document.getElementById('Username').value + ": " + document.getElementById('Content').value });
  }
</script>
</body>
</html>

答案 2 :(得分:0)

我设法在客户端加载了socket.io,如下所示:

jQuery.getScript("bower_components/socket.io/lib/socket.js", function() {
   var socket = io.connect('http://localhost');
   socket.on('news', function (data) {
     console.log(data);
     socket.emit('my other event', { my: 'data' });
   });
});