2013-07-14 1 views
0

У меня проблема с попыткой связи между python и javascript с помощью WebSockets.Как использовать веб-сокеты в javascript/html5 для связи с python

Это мой питон сервер (ws.py), который просто выводит все данные, которые он получает и пересылает его клиенту:

#!/usr/bin/env python 

# Echo server program 
import socket 

HOST = '' 
PORT = 50007 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((HOST, PORT)) 
s.listen(1) 
conn, addr = s.accept() 
print 'Connected by', addr 
while 1: 
    data = conn.recv(1024) 
    if not data: break 
    print 'Data recieved =', data 
    conn.sendall(data) 
conn.close() 

Это прекрасно работает с Netcat с помощью nc localhost 50007, но когда я пытаюсь с помощью моего HTML/клиент Javascript я получаю соединение, но сервер не получает сообщение, я просто получить последующие:

Connected by ('127.0.0.1', 62264) 
Data recieved = GET/HTTP/1.1 
Upgrade: websocket 
Connection: Upgrade 
Host: localhost:50007 
Origin: http://localhost 
Pragma: no-cache 
Cache-Control: no-cache 
Sec-WebSocket-Key: 6hxDWShxMnFxwGYAWym+eg== 
Sec-WebSocket-Version: 13 
Sec-WebSocket-Extensions: x-webkit-deflate-frame 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36 
Cookie: SQLiteManager_currentLangue=2 

и это то, что я получаю в консоли Chrome:

WebSocket connection to 'ws://localhost:50007/' failed: basicWSoc.html:7 
Error Logged: [object Event] 

Это мой веб-клиент (basicWSoc.html)

<!DOCTYPE HTML> 
<html> 
<head> 
<script type="text/javascript"> 
    function WebSocketTest() 
    { 
    var connection=new WebSocket("ws://localhost:50007"); 
    connection.onopen = function() { 
     connection.send('Hello, Server!!'); //send a message to server once connection is opened. 
    }; 
    connection.onerror = function (error) { 
     console.log('Error Logged: ' + error); //log errors 
    }; 
    connection.onmessage = function (e) { 
     console.log('Received From Server: ' + e.data); //log the received message 
    }; 
} 
</script> 
</head> 
<body> 
<div id="sse"> 
    <a href="javascript:WebSocketTest()">Run WebSocket</a> 
</div> 
</body> 
</html> 

Теперь я еще новичок в питона и веб-сокетов совершенно новое для меня, так что я может быть более очевидным, глядя ....

Любая помощь будет принята с благодарностью

+0

Веб-сокеты - это особый протокол, а не сырые сокеты. Вам нужен сервер Python WebSocket. – SLaks

+0

@sLaks у вас были бы рекомендации относительно того, где я мог бы найти пример как основной, как я это сделал? где бы я ни выглядел, очень тяжелый код, и мне трудно понять. Я не против использовать библиотеку, если это то, что нужно Мне просто хотелось бы, чтобы мой скрипт python был как можно более прямым, – jonnie

+0

@SLaks также я все еще использую raw-сокет, когда я использую 'socket.SOCK_STREAM', I думал, что это использует TCP? – jonnie

ответ

0

Благодаря @SLaks, который указал мне, что я использовал TCP сокетов, как проставление на веб-сокетов. Я изменил свой сервис Python, чтобы использовать библиотеку Tornado, которая реализовала веб-сокеты, и это позволило мне подключиться к моему веб-клиенту и успешно обмениваться данными между ними.

Смежные вопросы