Node.js、socket.io、require()

Node.js、socket.io、require(),node.js,socket.io,Node.js,Socket.io,我的目标:创建node.js服务器和客户端应用程序,它们将在两个web浏览器之间发送antyhing(事件、字符串、函数调用) 我安装并创建了简单服务器,但问题始于创建客户机。正如在上所说,我是通过命令安装的: npm安装socket.io 但基本示例中需要的文件: 未下载或安装。在/node\u modules/socket.id/lib中有这样一个文件名,但是同一个文件吗?我认为这是socket.io客户端,但作为服务器的模块,而不是web浏览器javascript,对吗 如何获取能够正常

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

我安装并创建了简单服务器,但问题始于创建客户机。正如在上所说,我是通过命令安装的:

npm安装socket.io

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

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

如何获取能够正常工作并能够连接到node.js服务器的
socket.io.js
,而不会出现io/socket/require等错误

我不想创建响应正常http请求的web服务器。我想要一个能够在两个浏览器中保持连接并能够在JS脚本之间通信的服务器

我能忍受的是,每个人都以表单的形式写node.js,就像世界上每个人在每个可能的目录中都有socket.io.js文件一样。可能的副本:

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

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

我从演示中抓取了一个例子

/**Socket.IO 0.6.2-使用build.js构建*/
/**
*Socket.IO客户端
* 
*@作者吉列尔莫·劳赫
*@license是麻省理工学院的许可证。
*@版权所有(c)2010 LearnBoost
*/
此.io={
版本:“0.6.2”,
...

如何以正常方式获取该文件,而不从其他服务器(可能不稳定或旧版本)窃取该文件?我需要检查该文件。是否存在任何依赖项?我是否应该使用build.js创建该文件或者开发人员这样做了?

你确实需要在任何地方添加
/socket.io/socket.io.js
。如果你通过
npm install socket.io安装了socket.io,你的应用程序知道如何处理它。几个月前我自己也使用过socket.io,这是一个非常简单的“聊天”这是我想到的,而且很有效。所以它可能会帮助你!(我正在使用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>

插座测试

var socket=io.connect('http://localhost:3000/pathtoproject'); socket.on('news',函数(数据){ document.body.innerHTML+=data.content+“
”; }); 函数sendMessage(){ emit('news',{text:document.getElementById('Username').value+“:“+document.getElementById('Content').value}); }
我终于解决了这个问题

socket.io脚本不作为平面文件存在。它由node.js server生成,并提供给浏览器。因此,包括:

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


我成功地在客户端加载了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' });
   });
});

可能重复:)您确实在客户端html页面的头部部分包含了
。这与
npm install socket.io
无关。很明显,如果我得到您的index.html并放入web服务器,当浏览器请求
http://site.....com/socket.io/socket.io.js
b因为您确实需要将JS文件放在web服务器路径上,以便将其包含在head中并具有“io”已定义。当然,您必须在html文件中包含
行。我的意思是,您确实需要创建一个名为
socket.io
的文件夹和位于同一文件夹中的名为
socket.io.js
的文件。您的应用程序将处理此问题。
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' });
   });
});