Sanic Sockets 实例

Sanic教程 2019-04-15 21:22:05 阅读(19519) 评论(0)

Sanic 可以使用 Python 的 socket 模块来容纳非 IPv4 的 sockets。比如下面的 IPv6 的例子:

Sanic Sockets 套接字

from sanic import Sanic
from sanic.response import json
import socket

sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
sock.bind(('::', 7777))

app = Sanic()


@app.route("/")
async def test(request):
    return json({"hello": "world"})

if __name__ == "__main__":
    app.run(sock=sock)

可以通过 curl 来测试这个 IPv6 的应用:

curl -g -6 "http://[::1]:7777/"

同样的,也可以实现 Unix socket 的绑定:

import signal
import sys
import socket
import os
from sanic import Sanic
from sanic.response import json


server_socket = '/tmp/sanic.sock'

sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.bind(server_socket)

app = Sanic()


@app.route("/")
async def test(request):
    return json({"hello": "world"})


def signal_handler(sig, frame):
    print('Exiting')
    os.unlink(server_socket)
    sys.exit(0)


if __name__ == "__main__":
    app.run(sock=sock)

使用curl测试 Unix socket:

curl -v --unix-socket /tmp/sanic.sock http://localhost/hello

猿人学banner宣传图

我的公众号:猿人学 Python 上会分享更多心得体会,敬请关注。

***版权申明:若没有特殊说明,文章皆是猿人学 yuanrenxue.con 原创,没有猿人学授权,请勿以任何形式转载。***

  • 上一篇 >:
  • 下一篇 >:
  • 说点什么吧...