Bạn đang tìm hiểu về các mẫu không chặn trong Python vào đúng thời điểm;] Có rất nhiều cách để làm điều đó vì vậy tôi không thực sự ngạc nhiên khi bạn bối rối. Bạn đã đặt tên là
from uuid import uuid4
from twisted.internet import endpoints, protocol, reactor
class Echo[protocol.Protocol]:
def __init__[self]:
self.identity = uuid4[].hex
def connectionMade[self]:
message = '{}: hello world'.format[self.identity]
self.transport.write[message.encode[]]
def dataReceived[self, data]:
print[data.decode[]]
def connect_to_server[factory]:
return endpoints.clientFromString[reactor, 'tcp:6000:host=127.0.0.1'].connect[factory]
def main[]:
factory = protocol.ClientFactory.forProtocol[Echo]
connect_to_server[factory]
connect_to_server[factory]
connect_to_server[factory]
reactor.run[]
main[]
0, là khung trưởng thành nhất và cũng có from uuid import uuid4
from twisted.internet import endpoints, protocol, reactor
class Echo[protocol.Protocol]:
def __init__[self]:
self.identity = uuid4[].hex
def connectionMade[self]:
message = '{}: hello world'.format[self.identity]
self.transport.write[message.encode[]]
def dataReceived[self, data]:
print[data.decode[]]
def connect_to_server[factory]:
return endpoints.clientFromString[reactor, 'tcp:6000:host=127.0.0.1'].connect[factory]
def main[]:
factory = protocol.ClientFactory.forProtocol[Echo]
connect_to_server[factory]
connect_to_server[factory]
connect_to_server[factory]
reactor.run[]
main[]
1, được xây dựng thành Python 3+. Chọn cái nào là dễ nhất để bạn học. Như bạn có thể thấy, chúng rất giống nhau về phong cách.asyncio_client.py
import asyncio
from uuid import uuid4
class Echo[asyncio.Protocol]:
def __init__[self]:
self.identity = uuid4[].hex
def connection_made[self, transport]:
message = '{}: hello world'.format[self.identity]
transport.write[message.encode[]]
def data_received[self, data]:
print[data.decode[]]
def echo_factory[]:
return Echo[]
async def connect_to_server[loop]:
await loop.create_connection[echo_factory, host='127.0.0.1', port=6000]
def main[]:
loop = asyncio.get_event_loop[]
loop.create_task[connect_to_server[loop]]
loop.create_task[connect_to_server[loop]]
loop.create_task[connect_to_server[loop]]
loop.run_forever[]
main[]
twisted_client.py
from uuid import uuid4
from twisted.internet import endpoints, protocol, reactor
class Echo[protocol.Protocol]:
def __init__[self]:
self.identity = uuid4[].hex
def connectionMade[self]:
message = '{}: hello world'.format[self.identity]
self.transport.write[message.encode[]]
def dataReceived[self, data]:
print[data.decode[]]
def connect_to_server[factory]:
return endpoints.clientFromString[reactor, 'tcp:6000:host=127.0.0.1'].connect[factory]
def main[]:
factory = protocol.ClientFactory.forProtocol[Echo]
connect_to_server[factory]
connect_to_server[factory]
connect_to_server[factory]
reactor.run[]
main[]
Hi,
Tôi đang đi qua các tài liệu để kết nối một máy khách Python duy nhất với nhiều máy chủ nút nhưng có nghi ngờ.
Tài liệu nêu rõ:
from uuid import uuid4
from twisted.internet import endpoints, protocol, reactor
class Echo[protocol.Protocol]:
def __init__[self]:
self.identity = uuid4[].hex
def connectionMade[self]:
message = '{}: hello world'.format[self.identity]
self.transport.write[message.encode[]]
def dataReceived[self, data]:
print[data.decode[]]
def connect_to_server[factory]:
return endpoints.clientFromString[reactor, 'tcp:6000:host=127.0.0.1'].connect[factory]
def main[]:
factory = protocol.ClientFactory.forProtocol[Echo]
connect_to_server[factory]
connect_to_server[factory]
connect_to_server[factory]
reactor.run[]
main[]
2from uuid import uuid4
from twisted.internet import endpoints, protocol, reactor
class Echo[protocol.Protocol]:
def __init__[self]:
self.identity = uuid4[].hex
def connectionMade[self]:
message = '{}: hello world'.format[self.identity]
self.transport.write[message.encode[]]
def dataReceived[self, data]:
print[data.decode[]]
def connect_to_server[factory]:
return endpoints.clientFromString[reactor, 'tcp:6000:host=127.0.0.1'].connect[factory]
def main[]:
factory = protocol.ClientFactory.forProtocol[Echo]
connect_to_server[factory]
connect_to_server[factory]
connect_to_server[factory]
reactor.run[]
main[]
2Làm thế nào để bạn tạo ra một ổ cắm ZMQ mới?
Ngoài ra trong tệp readme, nó tuyên bố:
from uuid import uuid4
from twisted.internet import endpoints, protocol, reactor
class Echo[protocol.Protocol]:
def __init__[self]:
self.identity = uuid4[].hex
def connectionMade[self]:
message = '{}: hello world'.format[self.identity]
self.transport.write[message.encode[]]
def dataReceived[self, data]:
print[data.decode[]]
def connect_to_server[factory]:
return endpoints.clientFromString[reactor, 'tcp:6000:host=127.0.0.1'].connect[factory]
def main[]:
factory = protocol.ClientFactory.forProtocol[Echo]
connect_to_server[factory]
connect_to_server[factory]
connect_to_server[factory]
reactor.run[]
main[]
3Có phải tôi đang hiểu sai sự khác biệt giữa hai tuyên bố?
Những công việc này:
import zerorpc
c = zerorpc.Client[]
c.connect["tcp://127.0.0.1:4242"]
c1 = zerorpc.Client[]
c1.connect["tcp://127.0.0.1:4444"]
print[c.test[]]
print[c1.test[]]
Điều này không hiệu quả với tôi:
import zerorpc
c = zerorpc.Client[]
c.bind["tcp://127.0.0.1:4242"]
c1 = zerorpc.Client[]
c1.bind["tcp://127.0.0.1:4444"]
print[c.test[]]
print[c1.test[]]
Đây là hai máy chủ nút của tôi:
//SERVER 1
var zerorpc = require["zerorpc"]
var server = new zerorpc.Server[{
test: function[reply]{
console.log["Server1: receiving from python"]
reply[null, "Hello from server one"]
}
}]
server.bind["tcp://0.0.0.0:4242"]
//SERVER 2
var zerorpc = require["zerorpc"]
var server = new zerorpc.Server[{
test: function[reply]{
console.log["Server2: receiving from python"]
reply[null, "Hello from server Two"]
}
}]
server.bind["tcp://0.0.0.0:4444"]
Người học tốt! Trong hướng dẫn trước đây của chúng tôi, chúng tôi đã thảo luận về mô -đun Python Unittest. Hôm nay chúng ta sẽ xem xét ví dụ lập trình ổ cắm Python. Chúng tôi sẽ tạo máy chủ và ứng dụng máy khách Python Socket.
Lập trình ổ cắm Python
Để hiểu lập trình ổ cắm Python, chúng ta cần biết về ba chủ đề thú vị - máy chủ ổ cắm, máy khách ổ cắm và ổ cắm. Vậy, máy chủ là gì? Vâng, một máy chủ là một phần mềm chờ đợi các yêu cầu của khách hàng và phục vụ hoặc xử lý chúng phù hợp. Mặt khác, một khách hàng là người yêu cầu dịch vụ này. Yêu cầu chương trình khách hàng cho một số tài nguyên cho máy chủ và máy chủ đáp ứng yêu cầu đó. Ổ cắm là điểm cuối của kênh liên lạc hai chiều giữa máy chủ và máy khách. Các ổ cắm có thể giao tiếp trong một quy trình, giữa các quy trình trên cùng một máy hoặc giữa các quy trình trên các máy khác nhau. Đối với bất kỳ giao tiếp nào với một chương trình từ xa, chúng tôi phải kết nối thông qua cổng ổ cắm. Mục tiêu chính của hướng dẫn lập trình ổ cắm này là để giới thiệu cho bạn cách máy chủ ổ cắm và máy khách giao tiếp với nhau. Bạn cũng sẽ học cách viết chương trình Máy chủ Socket Python.Socket Server, Socket Client and Socket. So, what is a server? Well, a server is a software that waits for client requests and serves or processes them accordingly. On the other hand, a client is requester of this service. A client program request for some resources to the server and server responds to that request. Socket is the endpoint of a bidirectional communications channel between server and client. Sockets may communicate within a process, between processes on the same machine, or between processes on different machines. For any communication with a remote program, we have to connect through a socket port. The main objective of this socket programming tutorial is to get introduce you how socket server and client communicate with each other. You will also learn how to write python socket server program.
Ví dụ về ổ cắm Python
Chúng tôi đã nói trước đó rằng một máy khách ổ cắm yêu cầu một số tài nguyên cho máy chủ ổ cắm và máy chủ đáp ứng yêu cầu đó. Vì vậy, chúng tôi sẽ thiết kế cả mô hình máy chủ và máy khách để mỗi người có thể giao tiếp với chúng. Các bước có thể được xem xét như thế này.
- Chương trình máy chủ Python ổ cắm lúc đầu thực hiện và chờ mọi yêu cầu
- Chương trình máy khách Python Socket sẽ bắt đầu cuộc trò chuyện lúc đầu.
- Sau đó, chương trình máy chủ sẽ phản hồi phù hợp với các yêu cầu của khách hàng.
- Chương trình khách hàng sẽ chấm dứt nếu người dùng nhập tin nhắn của By Bye. Chương trình máy chủ cũng sẽ chấm dứt khi chương trình khách hàng chấm dứt, đây là tùy chọn và chúng tôi có thể giữ chương trình máy chủ chạy vô thời hạn hoặc chấm dứt với một số lệnh cụ thể trong yêu cầu của khách hàng.
Máy chủ ổ cắm Python
Chúng tôi sẽ lưu Chương trình Máy chủ Socket Python dưới dạng
from uuid import uuid4
from twisted.internet import endpoints, protocol, reactor
class Echo[protocol.Protocol]:
def __init__[self]:
self.identity = uuid4[].hex
def connectionMade[self]:
message = '{}: hello world'.format[self.identity]
self.transport.write[message.encode[]]
def dataReceived[self, data]:
print[data.decode[]]
def connect_to_server[factory]:
return endpoints.clientFromString[reactor, 'tcp:6000:host=127.0.0.1'].connect[factory]
def main[]:
factory = protocol.ClientFactory.forProtocol[Echo]
connect_to_server[factory]
connect_to_server[factory]
connect_to_server[factory]
reactor.run[]
main[]
4. Để sử dụng kết nối ổ cắm Python, chúng ta cần nhập mô -đun ổ cắm. Sau đó, tuần tự chúng ta cần thực hiện một số nhiệm vụ để thiết lập kết nối giữa máy chủ và máy khách. Chúng ta có thể lấy địa chỉ máy chủ bằng cách sử dụng hàm from uuid import uuid4
from twisted.internet import endpoints, protocol, reactor
class Echo[protocol.Protocol]:
def __init__[self]:
self.identity = uuid4[].hex
def connectionMade[self]:
message = '{}: hello world'.format[self.identity]
self.transport.write[message.encode[]]
def dataReceived[self, data]:
print[data.decode[]]
def connect_to_server[factory]:
return endpoints.clientFromString[reactor, 'tcp:6000:host=127.0.0.1'].connect[factory]
def main[]:
factory = protocol.ClientFactory.forProtocol[Echo]
connect_to_server[factory]
connect_to_server[factory]
connect_to_server[factory]
reactor.run[]
main[]
5. Nên cho địa chỉ cổng người dùng trên 1024 vì số cổng thấp hơn 1024 được dành cho giao thức Internet tiêu chuẩn. Xem mã ví dụ Máy chủ Socket Python bên dưới, các nhận xét sẽ giúp bạn hiểu mã.socket module. Then, sequentially we need to perform some task to establish connection between server and
client. We can obtain host address by using from uuid import uuid4
from twisted.internet import endpoints, protocol, reactor
class Echo[protocol.Protocol]:
def __init__[self]:
self.identity = uuid4[].hex
def connectionMade[self]:
message = '{}: hello world'.format[self.identity]
self.transport.write[message.encode[]]
def dataReceived[self, data]:
print[data.decode[]]
def connect_to_server[factory]:
return endpoints.clientFromString[reactor, 'tcp:6000:host=127.0.0.1'].connect[factory]
def main[]:
factory = protocol.ClientFactory.forProtocol[Echo]
connect_to_server[factory]
connect_to_server[factory]
connect_to_server[factory]
reactor.run[]
main[]
5 function. It is recommended to user port address above 1024 because port number lesser than 1024 are reserved for standard internet protocol. See the below python socket server example code, the comments will help you to understand the code.import socket
def server_program[]:
# get the hostname
host = socket.gethostname[]
port = 5000 # initiate port no above 1024
server_socket = socket.socket[] # get instance
# look closely. The bind[] function takes tuple as argument
server_socket.bind[[host, port]] # bind host address and port together
# configure how many client the server can listen simultaneously
server_socket.listen[2]
conn, address = server_socket.accept[] # accept new connection
print["Connection from: " + str[address]]
while True:
# receive data stream. it won't accept data packet greater than 1024 bytes
data = conn.recv[1024].decode[]
if not data:
# if data is not received break
break
print["from connected user: " + str[data]]
data = input[' -> ']
conn.send[data.encode[]] # send data to the client
conn.close[] # close the connection
if __name__ == '__main__':
server_program[]
Vì vậy, máy chủ ổ cắm Python của chúng tôi đang chạy trên cổng 5000 và nó sẽ đợi yêu cầu của khách hàng. Nếu bạn muốn máy chủ không thoát khi kết nối máy khách được đóng, chỉ cần xóa câu lệnh IF và ngắt điều kiện. Python trong khi vòng lặp được sử dụng để chạy chương trình máy chủ vô thời hạn và tiếp tục chờ đợi yêu cầu của khách hàng.
Máy khách Python ổ cắm
Chúng tôi sẽ lưu chương trình máy khách Python ổ cắm dưới dạng
from uuid import uuid4
from twisted.internet import endpoints, protocol, reactor
class Echo[protocol.Protocol]:
def __init__[self]:
self.identity = uuid4[].hex
def connectionMade[self]:
message = '{}: hello world'.format[self.identity]
self.transport.write[message.encode[]]
def dataReceived[self, data]:
print[data.decode[]]
def connect_to_server[factory]:
return endpoints.clientFromString[reactor, 'tcp:6000:host=127.0.0.1'].connect[factory]
def main[]:
factory = protocol.ClientFactory.forProtocol[Echo]
connect_to_server[factory]
connect_to_server[factory]
connect_to_server[factory]
reactor.run[]
main[]
6. Chương trình này tương tự như chương trình máy chủ, ngoại trừ ràng buộc. Sự khác biệt chính giữa chương trình máy chủ và máy khách là, trong chương trình máy chủ, nó cần liên kết địa chỉ máy chủ và địa chỉ cổng với nhau. Xem mã ví dụ máy khách Python Socket dưới đây, nhận xét sẽ giúp bạn hiểu mã.import socket
def client_program[]:
host = socket.gethostname[] # as both code is running on same pc
port = 5000 # socket server port number
client_socket = socket.socket[] # instantiate
client_socket.connect[[host, port]] # connect to the server
message = input[" -> "] # take input
while message.lower[].strip[] != 'bye':
client_socket.send[message.encode[]] # send message
data = client_socket.recv[1024].decode[] # receive response
print['Received from server: ' + data] # show in terminal
message = input[" -> "] # again take input
client_socket.close[] # close the connection
if __name__ == '__main__':
client_program[]
Đầu ra lập trình ổ cắm Python
Để xem đầu ra, trước tiên hãy chạy chương trình máy chủ ổ cắm. Sau đó chạy chương trình máy khách ổ cắm. Sau đó, viết một cái gì đó từ chương trình khách hàng. Sau đó, một lần nữa viết trả lời từ chương trình máy chủ. Cuối cùng, viết Bye từ chương trình khách hàng để chấm dứt cả hai chương trình. Dưới đây, video ngắn sẽ cho thấy cách nó hoạt động trên các chương trình ví dụ về máy chủ và máy chủ của máy chủ và máy khách.bye from client program to terminate both program. Below short video will show how it worked on my test run of socket server and client example programs.
pankaj$ python3.6 socket_server.py
Connection from: ['127.0.0.1', 57822]
from connected user: Hi
-> Hello
from connected user: How are you?
-> Good
from connected user: Awesome!
-> Ok then, bye!
pankaj$
pankaj$ python3.6 socket_client.py
-> Hi
Received from server: Hello
-> How are you?
Received from server: Good
-> Awesome!
Received from server: Ok then, bye!
-> Bye
pankaj$
Lưu ý rằng máy chủ ổ cắm đang chạy trên cổng 5000 nhưng máy khách cũng yêu cầu cổng ổ cắm để kết nối với máy chủ. Cổng này được gán ngẫu nhiên bởi cuộc gọi kết nối máy khách. Trong trường hợp này, nó 57822 Tham khảo: Tài liệu chính thức