2

我的目标:创建将在两个 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 客户端,但作为服务器模块,而不是 Web 浏览器 javascript 对吗?

如何socket.io.js让它正常工作并可以连接到 node.js 服务器,而不会出现 io/socket/require 未定义等错误?

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

我只能忍受,每个人都以世界上每个人都在每个可能的目录中都有 socket.io.js 文件的形式写关于 node.js 的内容。可能的重复:

未找到 socket.io.js

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',
...

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

4

3 回答 3

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>

于 2012-08-03T13:54:58.247 回答
2

您确实需要在/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>
于 2012-08-03T12:24:56.847 回答
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' });
   });
});
于 2014-05-24T16:41:24.193 回答