在Angularjs中将客户端连接到套接字

时间:2018-02-10 22:24:12

标签: javascript python angularjs sockets

我对Socket协议非常陌生,我确信问题来自于我对此几乎一无所知。但基本上我的服务器端口5000上有一个套接字,我需要一个angularjs代码来监听这个套接字。服务器上的套接字可以读取我从另一台计算机(客户端)发送的任何内容。但由于某种原因,角度代码无法监听/连接到套接字。这就是我现在所拥有的:

的index.html

<html ng-app="MyAwesomeApp">
<head>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/ng-websocket/ng-websocket.js"></script>
<script src="app.js"></script>
</head>

<body ng-controller="cnt">
</body>    
</html> 

这里是angularjs代码:

app.js

var app = angular.module('MyAwesomeApp', ['ngWebsocket']);

app.controller('cnt', function ($websocket) {
  var ws = $websocket.$new('ws://localhost:5000');

  ws.$on('$open', function () {
    ws.$emit('hello', 'world'); // it sends the event 'hello' with data 'world'
  })
  .$on('test', function (message) { // it listents for 'incoming event'
    console.log('something incoming from the server: ' + message);
  });
});

这里是我用于服务器套接字的python代码:

#server example
import socket

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('localhost', 5000))
serversocket.listen(1) # become a server socket, maximum 5 connections
# print "hello"
while True:
    connection, address = serversocket.accept()
    print address
    while True:
        buf = connection.recv(16)
        if len(buf) > 0:
            connection.sendall(buf)
            print buf
            # break

大多数angularjs代码来自https://coderwall.com/p/uhqeqg/html5-websocket-with-angularjs

这些是我在Chrome中遇到的错误

  

ng-websocket.js:122 WebSocket连接到&#39; ws:// localhost:5000 /&#39;   失败:WebSocket握手期间出错:net :: ERR_CONNECTION_RESET

并在Firefox中:

  

Firefox无法与服务器建立连接   WS://本地主机:5000 /

1 个答案:

答案 0 :(得分:0)

你想做的事是不可能的。至少不是你想要的方式。

WebSockets是一种应用层协议,与HTTP协议非常相似。请注意ws的{​​{1}}部分。

另一方面,您使用的是普通的BSD插座。这只是双方之间沟通的原始套接字。它需要“了解”另一方(AngularJS)正在“说话”的内容,即需要使用相同的协议进行通信。在BSD套接字的情况下,它本身就没有。

这就是你得到的原因:

  

ng-websocket.js:122 WebSocket连接到'ws:// localhost:5000 /'   失败:WebSocket握手期间出错:net :: ERR_CONNECTION_RESET

为了能够做到这一点,你需要一些基于WebSockets协议的异步编程框架。一个建议是Autobahn