AngularJS 和 Websocket

Posted

技术标签:

【中文标题】AngularJS 和 Websocket【英文标题】:AngularJS and Websocket 【发布时间】:2018-01-30 05:10:44 【问题描述】:

我正在尝试创建一个简单的回声测试应用程序,其中我有连接和断开按钮。每当我点击连接时,我都想创建一个 websocket 对象。我在服务中这样做。但不知何故,在创建对象后 onopen 并没有被解雇。我是新来的。有人能帮我吗?谢谢。 这是我的代码

html 代码

<button class="echo-test-button" id ="connect" ng-click ="connect()">
        Connect
    </button>
    <button class="echo-test-button" id ="disconnect" ng-click ="disconnect()">
        Disconnect
    </button>

控制器

var app = angular.module("test");
app.controller('SocketCtrl',["$scope","$window","Socket","$rootScope",
    function ($scope, $window, socket, $rootScope) 

    $scope.connect = function () 

        socket.createConnection();
    

    ]);

套接字服务

angular.module("test").factory("Socket",["$http","$q", function ($http, $q) 
    var ws = ;
    var socket = 
        url :  "ws://echo.websocket.org/",

    ;
    socket.createConnection = function() 
        ws = new WebSocket(socket.url);
    ;
    ws.onopen = function (event) 
        console.log("Established");
    
    return socket;
]);

【问题讨论】:

【参考方案1】:

您的 onopen 处理程序未正确设置。在 createConnection 方法中移动 onopen 处理程序。

angular.module("test").factory("Socket",["$http","$q", function ($http, $q) 
    var ws = ;
    var socket = 
        url :  "ws://echo.websocket.org/",

    ;
    socket.createConnection = function() 
        ws = new WebSocket(socket.url);
        ws.onopen = function (event) 
            console.log("Established");
        
    ;
    return socket;
]);

【讨论】:

如何向客户端发送确认套接字已建立?有什么好办法吗? @dhamchan 通过在同一个套接字上从服务器向客户端发送确认消息。也许从 on​​open 函数中仍然可以访问 ws 套接字。 @vijaykrishnavanshi,你能编辑你的代码并给我看吗?如何发送ack?我是新手。

以上是关于AngularJS 和 Websocket的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS进阶(三十三)书海拾贝之简介AngularJS中使用factory和service的方法

AngularJS中的$watch(),$digest()和$apply()

angularjs主要是做啥

angularjs 难点总结

AngularJS

AngularJS学习笔记