使用多线程,下面的代码,简单实现一个多线程的web服务器:
#coding=utf-8import socket
import threading
from time import sleep
def response(sock, addr):
print "收到请求"
data = sock.recv(1024)
print data
sock.send(html)
sock.close()
html = '''HTTP/1.1 200 OK\nContent-Type: text/html\n\r\nHello world!'''
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', 80))
s.listen(50)
print "正在等待连接……"
while 1:
sleep(0.1)
sock,addr = s.accept()
t = threading.Thread(target=response, args=(sock,addr))
t.start()
rpyc是我用过的最容易,也最强大的远程进程通讯了。当然如果你自己编写框架,可以比它更强大也可能。
你搜索一下官网或者是任意一个教程都可以找到一个解决方案,然后你变化一下就可以解决你的问题。
因为不太理解你的问题,所以先解释一下,rpyc实现的是将客户端代码,复制到服务端,并在服务端执行后将结果包装后返回服务端。当然如果服务端已经有这个代码了,就可以直接执行,然后结果返回。
所以原则上讲,不可能在客户端没有连接服务端的情形下,从服务端返回消息的。 所以你试验的应该是连接到服务端,然后获得响应。这个是可以的。
如果你想发消息到服务端直接通过函数的参数就可以啦。
import rpycc=rpyc.connect('localhost',服务端端口)
print c.root.服务端exposed的函数(你要传递的参数放在这里)
c.close()
服务器端:#!/usr/bin/env python
import socket
host="localhost"
port=10000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))
s.listen(5)
while 1:
sock,addr=s.accept()
print "got connection form ",sock.getpeername()
data=sock.recv(1024)
if not data:
break
else:
print data
客户端:
#!/usr/bin/env python
import socket
host="localhost"
port=10000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
s.send("hello from client")
s.close()