38

我正在为 Android 2.3.5(也将与 iOS 兼容)编写一个应用程序。我希望将数据从应用程序的 HTML/Javascript 传输到服务器上的 Python 程序(它使用 Twisted 引擎来检索数据)。

我尝试了很多东西,查看了各种论坛、答案、教程和网页——包括这里的大部分——但找不到答案。这是我在 index.html 文件中的相关 Javascript:

<script src="socket-lib/socket.io.js"></script>
<script type="text/javascript" charset="utf-8">
function sendData() {
    try {
        var socket = io.connect('http://mywebsite.com:12345');
        socket.on('connect', function(data) {
            socket.send('Hello.');
            socket.on('message', function (msg) {
                socket.send('This is where I send data?');
            });
        });
    }
    catch(err) {
        alert('ERROR: socket.io encountered a problem:\n\n' + err);
    }
} // end of sendData

如果你不知道,我仍然很困惑这是如何工作的;我什至无法测试任何东西。不断出现的错误是ReferenceError: io is not defined。一些网站使用类似var io = require('socket.io');. 但随后它会导致相同的错误:ReferenceError: require is not defined.

我将 socket-lib 文件夹放在 assets/www 中,任何其他 Javascript 源都应该放在其中。这也是 index.html 文件所在的位置。许多网站使用<script src="/socket.io/socket.io.js"></script>,但这对我来说毫无意义。许多网站也暗示使用 node.js,但我从未在任何地方看到它。

我怎样才能使这项工作?

回复编辑:

我在 Chrome 中尝试过,它给了我一个Uncaught ReferenceError: require is not definedsocket.io.js 文件。所以我决定在 require.js 之前获取它。然后它给出了错误Uncaught Error: Module name "socket.io-client" has not been loaded yet for context。由于我没有使用它,所以我不在乎。但是,当我尝试连接时,它给出了同样的io is not defined错误。当我将其定义为var io = require('socket.io')时,错误为Error: Module name "socket.io" has not been loaded yet for context: _ http://requirejs.org/docs/errors.html#notloaded。我查看了网站,它对我没有任何帮助。当我尝试将“require”作为函数参数时,会发生另一个错误:TypeError: undefined is not a function.

4

9 回答 9

71

对于那些因socket.io.

你不能来源/socket-lib/socket.io.js

你必须来源http://yourwebsite.com:12345/socket.io/socket.io.js

服务器会自动为您完成其余的工作。

于 2012-08-28T13:37:51.850 回答
6

我通过更改 index.html 以从 bower 导入套接字 io 客户端自己解决了这个问题,首先我安装了 bower 组件:

 bower install socket.io-client

然后我将 index.html 中的引用更改为:

 <script src="bower_components/socket.io-client/socket.io.js"></script>

或者文件可以在 - lib/socket.io-client/dist/socket.io.js

于 2015-04-23T22:43:00.840 回答
2

我设法通过这个失误,并浪费了大约一个小时,结果证明是一个非常基本的错误。

什么时候没有定义函数?如“Uncaught ReferenceError: io is not defined”。这是否意味着该功能在“创建”之前就被“使用”了?

在我的 HTML 文件中“调用”javaScript 文件的部分中,它看起来像这样:

<script src='./js/playerChatter.js'></script> <!-- this one calls io -->
<script src="http://localhost:2019/socket.io/socket.io.js"></script><!-- This Creates io -->

它改成了这个

<script src="http://localhost:2019/socket.io/socket.io.js"></script> <!-- This Creates  io -->
<script src='./js/playerChatter.js'></script> <!-- this on calls io -->

所以现在项目“io”,无论是对象还是函数......实际上是在使用之前创建的:D

玩得开心!

于 2013-04-22T05:23:16.970 回答
2

在 socket.io.js 文件中编写服务器端代码并​​尝试 src="/socket.io/socket.io.js"

希望这能解决你的问题

于 2018-06-05T12:22:35.730 回答
1

当使用require.js让 socket.io 与许多其他库一起工作时,我遇到了同样的错误,结果是因为尝试从同一个 /js 文件夹加载 socket.io.js 文件而不是其他文件夹文件。

将它放在一个单独的文件夹中,为我修复它,你可以在这个 gist 中看到代码,但我所做的一切都是为了让它工作,是这样的:

代替:

socketio: 'socket.io',

采用:

socketio: '../socket.io/socket.io',

不确定这种行为的原因,但我希望它对您有所帮助。

于 2012-09-06T05:11:15.457 回答
0

这看起来像您的浏览器找不到 socket.io.js 文件。您可以尝试使用 Firefox+Firebug 或 Chrome Web 开发人员工具在您的计算机上打开 index.html,然后查看如何请求 .js 文件。另一方面,您可以检查为 .js 文件提供服务的网络服务器上的日志,是否有任何文件未找到错误。

require功能将由例如RequireJS提供,但您仍需要正确配置脚本的路径才能使其正常工作。

于 2012-08-16T21:14:04.993 回答
0

对我来说,在调试了所有非常有用的建议之后,结果证明我的节点服务器已经停止了。在开发期间,我一直在终端窗口中手动运行它。

确保您的节点 [yourservercode].js 在指定端口上运行!:-]

于 2013-05-11T19:24:33.597 回答
0

我使用jspm。

添加这个:

import 'btford/angular-socket-io/mock/socket-io';
于 2017-05-12T21:07:31.613 回答
0

在我的情况下,使用带有 C# UnitySocketIO插件的Unity WebGL,我需要在 Init 和 Connect 之间添加延迟(1 秒),因为第一种方法没有时间将新的 JS Socket 对象和代码(侦听器)添加到页面以和它一起工作..

于 2021-07-07T17:36:37.870 回答