- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要测试是否已建立与我的 websocket 服务器的连接。
此时,我可以连接到服务器,但我希望能够捕捉到该服务器不可达的可能性,所以这个问题是关于当websocket连接无法建立或超时时该怎么办出。
仅使用 Firefox 中的基本 websocket 代码,它将在大约 20 秒后超时并调用我的错误处理程序。但它也会抛出一个 JavaScript 错误(至少对我使用 Firebug 而言)出现在浏览器中。然后日志显示:
Firefox can't establish a connection to the server at ws://192.168.0.1/.
到目前为止我尝试了什么:
window.timeout
来防止 20 秒超时,它会检查 onopen
处理程序是否已被调用,但这并不能防止 JavaScript 错误.在我自己的超时结束时强行关闭 websocket,但现在我得到了两个 JavaScript 错误 - 原来的加上:
与 ws://192.168.0.1/的连接在页面加载时中断。
将 try {} catch(e) {}
添加到我的代码中,无论是在连接套接字还是关闭套接字时 - 没有变化。
关于如何让 websocket 错误不在浏览器中显示的任何想法?
最佳答案
到目前为止我学到的是:你不能 :0(
...因为这是特定于浏览器的行为...
console.log
;0)使用我所做的代码,但是我摆脱了一些错误消息,也许它会有所帮助;)
例如:
包装 WS 的基本类:看看回调!
/**
* Socket Class
*/
Client.Source.Network.Socket.Class = new Class({ implements: [Client.Source.Network.Socket.Interface] },function( Host, Port ){
var Configuration = {
Server: {
Protocol: 'ws',
Host: Host,
Port: Port
},
Event: {
Open: function(){},
Error: function(){},
Message: function(){},
Close: function(){}
}
};
var Socket = null;
/**
* @return {string}
*/
var HostUrl = function() {
return Configuration.Server.Protocol + '://' + Configuration.Server.Host + ':' + Configuration.Server.Port + '/Connection'
};
/**
* @returns {boolean}
*/
var IsSupported = function() {
return "WebSocket" in window;
};
this.Open = function() {
if( IsSupported() ) {
Socket = new WebSocket( HostUrl() );
Socket.onopen = Configuration.Event.Open;
Socket.onerror = Configuration.Event.Error;
Socket.onmessage = Configuration.Event.Message;
Socket.onclose = Configuration.Event.Close;
} else {
}
};
this.Send = function( Text ) {
Socket.send( Text );
};
this.Close = function() {
Socket.close();
};
this.onOpen = function( Callback ) {
Configuration.Event.Open = Callback;
};
this.onError = function( Callback ) {
Configuration.Event.Error = Callback;
};
this.onMessage = function( Callback ) {
Configuration.Event.Message = Callback;
};
this.onClose = function( Callback ) {
Configuration.Event.Close = Callback;
};
});
看看 Connect() :onError()、onClose() 函数
/**
* Network Class
*/
Client.Source.Network.Class = new Class({ implements: [Client.Source.Network.Interface] },function(){
var _Self = this;
var Socket = null;
this.Connect = function( Host, Port ) {
Socket = new Client.Source.Network.Socket.Class( Host, Port );
Socket.onOpen(function(){
_Self.Gui().Create( Client.Module.Client.Gui() );
Client.Module.Chat.Message('Connected', 'green', 11);
Client.Module.Audio.Play( 'Client.Resource.Audio.Chat.UserOnline', 0.2 );
});
Socket.onMessage( Response );
Socket.onError(function(){
Client.Module.Chat.Message('Connection Error', 'red', 11);
});
Socket.onClose(function(){
_Self.Gui().Destroy();
Client.Module.Chat.Message('Disconnected', 'darkred', 11);
Client.Module.Chat.Message('Connecting...', 'orange', 11);
window.setTimeout(function () {
_Self.Connect( Host, Port );
}, 2000);
});
Socket.Open();
};
this.Request = function( Application, Request, Data ) {
Socket.Send( JSON.stringify( { Application: Application, Request: Request, Data: Data } ) );
};
var Response = function( Message ) {
Message = JSON.parse( Message.data );
Library[Message.Application].Execute( Message.Request, Message.Data );
};
var Library = {};
this.Protocol = function( Application, Callback ) {
Library[Application] = Callback;
};
var GuiObject = null;
this.Gui = function Gui() {
if( GuiObject === null ) {
GuiObject = new Client.Source.Network.Gui();
}
return GuiObject;
};
});
关于javascript - 我可以捕获 "can' t establish a connection"失败的 websocket 连接错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22919638/
我最近开始使用 MSpec,将类分为 Establish、Because 和 It。 虽然我知道如何使用它们,但我不确定是什么让它们起作用。 我知道他们是代表 Because of = () => {
我的理解是每个 Establish 应该只执行一次,但下面的代码显示它执行了多次。我们嵌套类以提供一些分组,同时将 Subject 的单元测试保留在一个文件中。这似乎是一个错误。 我们正在使用 mac
我一直在谷歌上广泛搜索,试图解决这个问题,但似乎找不到解决方案。我正在尝试在我的 Chrome 扩展程序中完成设置监听器和发送器的简单任务。 我的 list { "manifest_version
这个错误是我从 lastError.js 文件中得到的,我没有在我的 html 页面中调用它。 var errorMessage = name + ': ' + message; if (sta
我的一个 AMQ 生产者有问题,我有网络问题,因此它无法向 Q 发送消息。然而,服务器打开与 Q 机器的连接并保持它们完好无损。连接数增加,Q 机器窒息,无法为其其余生产者和消费者提供服务。 这是我在
尝试从弹出窗口向我的 contentscript 发送消息时出现此错误。我想要做的是从我的 content.js 获取当前选项卡的文档并将其发送到弹出窗口。我该如何解决这个错误? { "manif
我有一个 Java 网络爬虫。我注意到,对于我抓取的少量服务器,我留下了大量已建立的套接字: joel@bohr:~/tmp/test$ lsof -p 6760 | grep TCP java
我正在使用 Unitt 库 ( http://code.google.com/p/unitt/wiki/UnittWebSocketClient ) 尝试在我的 iOS (iPhone) 应用程序中通
我正在使用 EWS Java API 连接 Exchange 服务器并检索有关邮件、日历约会和任务的信息。 除一个帐户外,它适用于许多用户。我收到以下错误: microsoft.exchange.we
我想使用 C/C++ 获取到我的服务器的 SYN 和 ESTABLISHED 连接数。但我不想调用 popen 来运行 netstat 或任何其他 Linux 命令。我设法扫描了/proc/net/i
我正在测试应用程序尝试访问未知 URL 时的行为。引发 ConnectionError 需要 5 秒。我怎样才能修改为在 100 毫秒时失败? 我尝试使用 requests.get(url, time
当我尝试为我的 VpnService 创建隧道接口(interface)时,出现以下错误: Attempt to invoke virtual method 'java.lang.String and
如果有一个网络服务器在端口 80 上运行,并且有人使用随机分配的端口 x 从客户端连接,那么服务器知道要回复哪个端口。但是,从那时起,与服务器的通信是否从那时起继续在端口 80 上进行(将文件描述符分
我做了一个实验: 一个监听8804端口的服务器接受一个客户端的连接,然后无休止地向客户端发送数据。我关闭了网络。 当我运行 netstat -anotp | grep 8804 ,显示服务器和客户端的
我正在尝试使用 JSch通过 ssh 连接到我的计算机,然后运行命令。 但是,当我运行代码时,我从未连接到计算机。和以下错误: I/System.out: com.jcraft.jsch.JSchEx
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
尝试为我们的Intranet的Web服务站点设置一个自签名证书。证书本身表明它是“ok”,但是当尝试从Web服务调用方法时,它会引发错误,并且在添加Web引用时也会给出警告。 这是确保我提供准确信息的
我正在使用 JavaScript 和 Union platform我将如何诊断这个问题?非常感谢。 最佳答案 如果你去http://jsbin.com/ekusep/6/edit并查看 JavaScr
我正在尝试设置一个保存点,并在遇到问题时回滚到该点。但我收到以下消息: SQL execution error, ORA-01086: savepoint 'LASTSAVE' never estab
我只有一个托管对象上下文。 不过我已经修改了托管对象存储。 我想将某些字段添加到每个托管对象中。将它们一一添加到系统中的每个对象会花费太多时间,因此我决定以编程方式将它们添加到托管对象模型中。在应用程
我是一名优秀的程序员,十分优秀!