【问题标题】:Send http response to multiple clients in python在python中向多个客户端发送http响应
【发布时间】:2020-05-15 13:21:22
【问题描述】:

一点解释: 我有多个客户端和一个用 python 编写的非常简单的 http 客户端。 在所有客户端中,一个客户端向 http 服务器发送一个带有 4 个值的 post 请求(让我们将此客户端称为“客户端 Alpha”),所有其余客户端发送 http post 请求只是为了建立与服务器的连接(让我们调用这些客户端“客户端测试版”)客户端测试版发送请求背后的原因是,他们可以接收通过客户端 alpha 发送的值...

import kwargs
import args

from http.server import BaseHTTPRequestHandler, HTTPServer
import logging
import requests
class S(BaseHTTPRequestHandler):
  def _set_response(self):
    self.send_response(200,1)
    self.send_header('Content-type', 'int')
    self.end_headers()

def breakRequest(self, str):
    l = []
    x = str.split("&")
    for i in x:
        a = i.split("=")
        l.append(a[1])
    return l[0], l[1], l[2], l[3]

def do_POST(self):
    content_length = int(self.headers['Content-Length']) # <--- Gets the size of data
    post_data = self.rfile.read(content_length) # <--- Gets the data itself
    var1,var2,var3,var4 = self.breakRequest(str(post_data.decode('utf-8')))
    if (var1 !='ard'):
        s = "\n" + var1+"\n"+var2+"\n"+var3 + "\n"+var4 + "\n"
        logging.info(s)
        logging.info("POST request,\nPath: %s\nHeaders:\n%s\n\nBody:\n%s\n",
            str(self.path), str(self.headers), post_data.decode('utf-8'))

    self._set_response()
    self.wfile.write("1".format(self.path).encode('utf-8'))    

def run(server_class=HTTPServer, handler_class=S, port=6060):
  logging.basicConfig(level=logging.INFO)
  server_address = ('', port)
  httpd = server_class(server_address, handler_class)
  logging.info('Starting httpd...\n')
  try:
     httpd.serve_forever()
  except KeyboardInterrupt:
    pass
httpd.server_close()
logging.info('Stopping httpd...\n')

if __name__ == '__main__':
 from sys import argv

 if len(argv) == 2:
     run(port=int(argv[1]))
 else:
     run()

客户端 alpha 发送的内容: 客户端 alpha 发送 4 个值,这些值存储在 var1、var2、var3、var4 中

客户端测试版发送的内容 客户端 beta 只发送一次 http post 请求以建立与服务器的连接

我想要达到的目标 一旦客户端 beta 建立了与服务器的连接,我试图让服务器将客户端 alpha 接收到的值存储到 var1、var2、va3、var4 中,然后将这些值立即发送给所有 beta 客户端已经发送出去然后等待,当服务器从客户端 alpha 接收到新值时,然后将这些新值发送到客户端 beta

每次更改测试客户端的IP地址时,它都会再次发送请求以建立连接。 和

我对 python 不是很擅长,我目前所拥有的一切都归功于谷歌,我一直在搜索示例并一直在实施和测试它们,最终得到了一个 python 代码,它接收 http post 数据并将其存储到变量中 我将非常感谢您的帮助 提前致谢 并为任何错误道歉

【问题讨论】:

    标签: python http httprequest


    【解决方案1】:

    您说的是让服务器连接到 4 个不同的客户端,并在发生特定事件时向它们推送数据。您将需要查看使用 Websockets (https://pypi.org/project/websockets/) 或服务器发送事件 (https://medium.com/code-zen/python-generator-and-html-server-sent-events-3cdf14140e56)。

    这是服务器可以将数据推送到其他客户端的仅有的两种方法,因为它们已连接,因此服务器知道它们存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 2017-08-11
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      • 2015-04-10
      相关资源
      最近更新 更多