当前位置:首页 > 技术 > Python > 正文内容

asyncio --- 异步 I/O http服务代码

Watrt4年前 (2021-10-11)Python20200
import asyncio
async def service(reader,writer):

   data = await reader.read(1024) #同步读取数据
   data =data.decode().replace('\r','<br/>')

   print(writer.get_extra_info('peername'))    #获取连接信息
   writer.write(b'HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n\r\n')  #返回HTTP响应头
   #writer.write(b'hi fukun\r\n')
   writer.write(data.encode())     #直接返回响应信息
   writer.close()
   #print(data)


async def server_run():
   server = await asyncio.start_server(service,'127.0.0.1',8888)
   addr = server.sockets[0].getsockname()
   print(f'Serving on {addr}')

   async with server:
       await server.serve_forever()    #开始连接

asyncio.run(server_run())

在linux python3.8测试通过。

import uasyncio
import gc

async def service(reader,writer):
  try:
    data = await reader.read(1024)
    print(data)
    await writer.awrite('HTTP/1.1 200 ok\r\n\r\n hi fukun'.encode())
    await writer.awrite(data)
  except:
    print("传输错误!")
  finally:
    await writer.aclose()
  gc.collect()
def start():
  
  loop = uasyncio.get_event_loop()        //获取协议
  #loop.call_soon(uasyncio.start_server(service, "0.0.0.0", 80))
  loop.create_task(uasyncio.start_server(service, "0.0.0.0"80))
  loop.run_forever()            
  loop.close()

uasyncio.run(start())

通过micropython 实现

打赏 支付宝打赏 微信打赏
分享给朋友:

相关文章

python编写的简单http请求和应答

python编写的简单http请求和应答

响应(服务端)import machine import socket pins = [machine.Pin(i, machine.Pin.IN) for i in (0, 2, 4, 5, 12, 13, 14, 15)] adc = machine.ADC(0) html = &quo...

micropython中使用rtc设置时间

micropython中使用rtc设置时间

micropython中使用rtc设置时间from machine import RTC rtc = RTC() rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time print(rtc.datetime(...

micropython 使用oled显示前面设置的时间。

micropython 使用oled显示前面设置的时间。

from machine import I2C, Pin import ssd1306,time    #这里引用的是官方的ssd1306库。可以在github上下载下来放入库中。 i2c = I2C(-1, Pin(14), Pin(2)) display = ssd1306.SSD1306_I2C(128, 64, i...

micropython连接到wifi上面

micropython连接到wifi上面

import network,time,ujson,urequests,ntptime from machine import RTC nic=network.WLAN(network.STA_IF) nic.active(True) #nic.connect('ZCWH','00004157') nic.connect('028sd.com','88884444') nic.co...

Python使用struct处理二进制(pack和unpack用法)

Python使用struct处理二进制(pack和unpack用法)

有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重要的三个函数是pack(), unpack(), calcsize()pack(fmt, v1, v2, ...)     按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) un...

pyqt5 开发入门

pyqt5 开发入门

使用:pyqt5-tools designer 进行窗口设计使用命令:pyuic5 -o textedit.py textedit.ui  把设计的UI文件转换成py文件注意:使用对话框的话要继承于class Ui_MainWindow(QtWidgets.QMainWindow):使用信号的方法:self.actionnew.triggered.connect(self.new_btn)    self.new_btn 为当前类下的方法下面示例:#&nb...

micropython 1.17编译出现FAILED: esp-idf/mbedtls/x509_crt_bundle

micropython 1.17编译出现FAILED: esp-idf/mbedtls/x509_crt_bundle

micropython 1.17编译出现FAILED: esp-idf/mbedtls/x509_crt_bundle 错误解决方法。出现错误的原因是ssl中的证书过期了。解决办法:1:(Top) > Component config > mbedTLS > Certificate Bundle->Enable trusted root certificate bundle   禁用2:修改配置文件 :sdkconfig.base  中添加入...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。