有没有办法处理 websocket onmessage 处理程序,就像 jQuery 中附加到 XHR 延迟对象的完成方法处理程序一样
Is there any way to handle websocket onmessage handler just like done method handlers attached to XHR deferred objects in jQuery
我目前正在做这个 hack 来处理 websocket 的 onmessage。
$scope.wsCon.onMessage = function(result) {
$scope.wsCon.trigger(result.handler, result.data);
};
这里的问题是,onmessage 正在处理所有通过 websocket 传入的请求。
但我需要这样的东西:
$scope.wsCon.
.send(data)
.done(data, function (result) {
// Deal with the result here
})
.fail(data, function() {
// Show the error message
})
.complete(data, function() {
// Do this always
});
我知道这在单连接的 websocket 中是无法实现的。但是,有什么方法可以产生像 jQuery 那样的效果吗?
WebSockets 不是基于 request/response 的,所以由于发送消息时不需要响应,您希望完成该承诺会发生什么?套接字刷新缓冲区? :) 如果浏览器由于套接字死机而无法发送消息,您将收到 "onerror" 消息。
如果您需要消息的确认,或者等待回复,您需要自己实现。
请看一下这个答案:AngularJS and WebSockets beyond About this $connection service declared in this WebSocket based AngularJS application
基本上这是一个关于在AngularJS中创建WebSocket服务的例子,可用于request/response和publish/subscribe。
基本上可以监听消息:
$connection.listen(function (msg) { return msg.type == "CreatedTerminalEvent"; },
function (msg) {
addTerminal(msg);
$scope.$$phase || $scope.$apply();
});
听一次(非常适合 request/response):
$connection.listenOnce(function (data) {
return data.correlationId && data.correlationId == crrId;
}).then(function (data) {
$rootScope.addAlert({ msg: "Console " + data.terminalType + " created", type: "success" });
});
并发送消息:
$connection.send({
type: "TerminalInputRequest",
input: cmd,
terminalId: $scope.terminalId,
correlationId: $connection.nextCorrelationId()
});
我目前正在做这个 hack 来处理 websocket 的 onmessage。
$scope.wsCon.onMessage = function(result) {
$scope.wsCon.trigger(result.handler, result.data);
};
这里的问题是,onmessage 正在处理所有通过 websocket 传入的请求。
但我需要这样的东西:
$scope.wsCon.
.send(data)
.done(data, function (result) {
// Deal with the result here
})
.fail(data, function() {
// Show the error message
})
.complete(data, function() {
// Do this always
});
我知道这在单连接的 websocket 中是无法实现的。但是,有什么方法可以产生像 jQuery 那样的效果吗?
WebSockets 不是基于 request/response 的,所以由于发送消息时不需要响应,您希望完成该承诺会发生什么?套接字刷新缓冲区? :) 如果浏览器由于套接字死机而无法发送消息,您将收到 "onerror" 消息。
如果您需要消息的确认,或者等待回复,您需要自己实现。
请看一下这个答案:AngularJS and WebSockets beyond About this $connection service declared in this WebSocket based AngularJS application
基本上这是一个关于在AngularJS中创建WebSocket服务的例子,可用于request/response和publish/subscribe。
基本上可以监听消息:
$connection.listen(function (msg) { return msg.type == "CreatedTerminalEvent"; },
function (msg) {
addTerminal(msg);
$scope.$$phase || $scope.$apply();
});
听一次(非常适合 request/response):
$connection.listenOnce(function (data) {
return data.correlationId && data.correlationId == crrId;
}).then(function (data) {
$rootScope.addAlert({ msg: "Console " + data.terminalType + " created", type: "success" });
});
并发送消息:
$connection.send({
type: "TerminalInputRequest",
input: cmd,
terminalId: $scope.terminalId,
correlationId: $connection.nextCorrelationId()
});