将python连接到javascript以进行双向通信

gen*_*gen 4 javascript python connection json request

我想通过python的javascript代码提供查询.但我根本没有这方面的经验.我想建立的是这样的:

request.js:

open_connection('server.py');
for (var i=0; i<10; i++)
    document.write(request_next_number());
close_connection('server.py')
Run Code Online (Sandbox Code Playgroud)

2. server.py

x = 0
while connected:
    if request:
        send(x)
        x = x + 1
Run Code Online (Sandbox Code Playgroud)

我听说过JSON,但不知道我是否应该使用它.(?)

你能给我一些代码示例或指导如何实现上面的两个文件吗?

eng*_*ree 8

你需要的是一端的套接字服务器python和javascript端的客户端/请求服务器.

对于python服务器端,请参考SocketServer(例如从那里获取),你必须确保套接字经过NAT(可能是端口转发).另一种选择是Twisted一个非常强大的框架,我相信它具有发送数据的功能NAT.

import SocketServer

class MyTCPHandler(SocketServer.BaseRequestHandler):
    """
    The RequestHandler class for our server.

    It is instantiated once per connection to the server, and must
    override the handle() method to implement communication to the
    client.
    """

    def handle(self):
        # self.request is the TCP socket connected to the client
        self.data = self.request.recv(1024).strip()
        print "{} wrote:".format(self.client_address[0])
        print self.data
        # just send back the same data, but upper-cased
        self.request.sendall(self.data.upper())

if __name__ == "__main__":
    HOST, PORT = "localhost", 9999

    # Create the server, binding to localhost on port 9999
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)

    # Activate the server; this will keep running until you
    # interrupt the program with Ctrl-C
    server.serve_forever()
Run Code Online (Sandbox Code Playgroud)

JavaScript有很多的框架,允许套接字连接,这里有几个

例:

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>
Run Code Online (Sandbox Code Playgroud)

例:

var connection = new WebSocket('ws://IPAddress:Port');
connection.onopen = function () {
  connection.send('Ping'); // Send the message 'Ping' to the server
};
Run Code Online (Sandbox Code Playgroud)

例:

_jssocket.setCallBack(event, callback);
_jssocket.connect(ip,port);
_jssocket.write(message);
_jssocket.disconnect();
Run Code Online (Sandbox Code Playgroud)

希望这有帮助!