如何部署UDP python 服务器?
How to deploy UDP python server?
我有一个项目。需要部署UDP服务器和Django服务器。
我知道如何部署 Django 服务器。它只是设置了 nginx 和 uwsgi。它会实现我的要求。
但是我不知道如何部署UDP服务器。这是我的 UDP 服务器的代码:
import asyncore
import socket
class EchoHandler(asyncore.dispatcher_with_send):
def handle_read(self):
data = self.recv(8192)
if data:
self.send(data)
class EchoServer(asyncore.dispatcher):
def __init__(self, host, port):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.set_reuse_addr()
self.bind((host, port))
self.listen(5)
def handle_accept(self):
pair = self.accept()
if pair is not None:
sock, addr = pair
print 'Incoming connection from %s' % repr(addr)
handler = EchoHandler(sock)
server = EchoServer('0.0.0.0', 8080)
asyncore.loop()
django应用服务器不是没有硬编码ip地址和端口,因为ip地址和端口可以提前写在nginx配置文件中
那么,谁有部署 udp 服务器的好主意?
假设你的 UDP 服务器在你 运行 在终端中工作时工作,但你不想为脚本保持终端打开,你想要的是 运行 你的脚本即服务。
在 Linux 的现代风格中,这可以在 SysV shell 脚本的经典风格中完成,或者使用 upstart 或 systemd。
这是一个很大的主题,您应该阅读如何从任意脚本创建 unix 服务(或者 windows 服务,如果您需要的话,这是一个非常不同的主题)。
编辑:关于运行宁脚本即服务的信息和资源。
守护脚本(运行在后台运行)的一些基本方法是使用 disown
、dtach
或 screen
。如果您的脚本位于 /path/to/myudp.py
,那么您可以使用以下之一:
disown python /path/to/myudp.py &
或
dtach python /path/to/myudp.py
或
screen python /path/to/myudp.py
这三个都非常相似,将从终端启动脚本,但当终端关闭时,脚本将继续 运行。但是这些不会在系统启动时自动启动,所以它们并不是真正的服务。这些方法适用于测试,但不适用于生产。
从脚本创建真正服务的第一种方法是创建 SysV 初始化脚本。在 Ubuntu 上,您可以在 /etc/init.d/ 中找到这些脚本,而在 linux 的其他版本中,它们可能在 /etc/rc.d/ 中。您可以在此处阅读有关创建脚本的信息:http://www.cyberciti.biz/tips/linux-write-sys-v-init-script-to-start-stop-service.html and here is a decent template: https://github.com/fhd/init-script-template/blob/master/template(注意:这些脚本在每个 linux 发行版上都会略有不同)。
从脚本创建服务的下一个方法是使用 upstart。如果您的系统是 运行ning upstart,您可能使用的是 Ubuntu 的新版本,并且 upstart 脚本将无法在不使用 upstart 进行服务管理的系统上运行。你可以在这里阅读更多关于暴发户的信息:http://upstart.ubuntu.com/getting-started.html.
最后也是最新的方法是写一个systemd单元文件。同样,这仅在系统 运行ning systemd 来管理其服务时才有效。您可以通过以下链接阅读有关在 systemd 中创建服务的信息:http://0pointer.de/blog/projects/systemd-docs.html and https://wiki.archlinux.org/index.php/Systemd#Writing_unit_files and http://patrakov.blogspot.com/2011/01/writing-systemd-service-files.html
我有一个项目。需要部署UDP服务器和Django服务器。
我知道如何部署 Django 服务器。它只是设置了 nginx 和 uwsgi。它会实现我的要求。
但是我不知道如何部署UDP服务器。这是我的 UDP 服务器的代码:
import asyncore
import socket
class EchoHandler(asyncore.dispatcher_with_send):
def handle_read(self):
data = self.recv(8192)
if data:
self.send(data)
class EchoServer(asyncore.dispatcher):
def __init__(self, host, port):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.set_reuse_addr()
self.bind((host, port))
self.listen(5)
def handle_accept(self):
pair = self.accept()
if pair is not None:
sock, addr = pair
print 'Incoming connection from %s' % repr(addr)
handler = EchoHandler(sock)
server = EchoServer('0.0.0.0', 8080)
asyncore.loop()
django应用服务器不是没有硬编码ip地址和端口,因为ip地址和端口可以提前写在nginx配置文件中
那么,谁有部署 udp 服务器的好主意?
假设你的 UDP 服务器在你 运行 在终端中工作时工作,但你不想为脚本保持终端打开,你想要的是 运行 你的脚本即服务。
在 Linux 的现代风格中,这可以在 SysV shell 脚本的经典风格中完成,或者使用 upstart 或 systemd。
这是一个很大的主题,您应该阅读如何从任意脚本创建 unix 服务(或者 windows 服务,如果您需要的话,这是一个非常不同的主题)。
编辑:关于运行宁脚本即服务的信息和资源。
守护脚本(运行在后台运行)的一些基本方法是使用 disown
、dtach
或 screen
。如果您的脚本位于 /path/to/myudp.py
,那么您可以使用以下之一:
disown python /path/to/myudp.py &
或
dtach python /path/to/myudp.py
或
screen python /path/to/myudp.py
这三个都非常相似,将从终端启动脚本,但当终端关闭时,脚本将继续 运行。但是这些不会在系统启动时自动启动,所以它们并不是真正的服务。这些方法适用于测试,但不适用于生产。
从脚本创建真正服务的第一种方法是创建 SysV 初始化脚本。在 Ubuntu 上,您可以在 /etc/init.d/ 中找到这些脚本,而在 linux 的其他版本中,它们可能在 /etc/rc.d/ 中。您可以在此处阅读有关创建脚本的信息:http://www.cyberciti.biz/tips/linux-write-sys-v-init-script-to-start-stop-service.html and here is a decent template: https://github.com/fhd/init-script-template/blob/master/template(注意:这些脚本在每个 linux 发行版上都会略有不同)。
从脚本创建服务的下一个方法是使用 upstart。如果您的系统是 运行ning upstart,您可能使用的是 Ubuntu 的新版本,并且 upstart 脚本将无法在不使用 upstart 进行服务管理的系统上运行。你可以在这里阅读更多关于暴发户的信息:http://upstart.ubuntu.com/getting-started.html.
最后也是最新的方法是写一个systemd单元文件。同样,这仅在系统 运行ning systemd 来管理其服务时才有效。您可以通过以下链接阅读有关在 systemd 中创建服务的信息:http://0pointer.de/blog/projects/systemd-docs.html and https://wiki.archlinux.org/index.php/Systemd#Writing_unit_files and http://patrakov.blogspot.com/2011/01/writing-systemd-service-files.html