以上就是给各位分享Windowsposix套接字性能,其中也会对windows套接字是什么意思进行解释,同时本文还将给你拓展AF_UNIX套接字开销?、c–在Windows7中创建POSIX应用程序?
以上就是给各位分享Windows posix套接字性能,其中也会对windows套接字是什么意思进行解释,同时本文还将给你拓展AF_UNIX套接字开销?、c – 在Windows 7中创建POSIX应用程序?、cygwin Windows套接字编程、Docker与一个nginx和一个共享一个UNIX套接字的uwsgi容器等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- Windows posix套接字性能(windows套接字是什么意思)
- AF_UNIX套接字开销?
- c – 在Windows 7中创建POSIX应用程序?
- cygwin Windows套接字编程
- Docker与一个nginx和一个共享一个UNIX套接字的uwsgi容器
Windows posix套接字性能(windows套接字是什么意思)
我正在寻找有关Windowsnetworking编程的信息。 主要是如何获得一个单一的可执行文件来处理1000个连接。
我们在unix上使用select()FD_ISSET等,这个工作非常快。 在Windows上,这些API非常差。 FD_SET慢得多,但即使在解决这个问题时,Windows也比HPUX慢很多。
我正在寻找一个win32 API调用,我可以使用,而不需要太多的cpu /时间的select()调用。 目前我们在select()中花费了50%的时间(和cpu),在unix中花费在send()和recv()上的时间,这是我所期望的。
感谢尼尔
closures接口Down上的所有TCP套接字
如何在原始套接字中丢弃传入数据包?
无法在Windows7上查看创build的开放端口,但可以在Mac上
原始套接字与TUN设备
如何查看/更改Linux上的套接字连接超时?
Android到Windows的TCP通信延迟
发送/接收奇怪的数据
如何使用SuperWebSocket创build一个WebSocket服务器
套接字在同一台计算机上通信比使用共享内存慢得多?
如何获得UDP套接字的排队数据量?
您可能正在寻找Windows I / O完成端口 。 这里是来自SysInternals家伙的文章 。
如果你真的进入可扩展的套接字编程,没有什么比在Windows上的IO完成端口更好。
说完这个,你的程序可能需要对完成端口模型进行大的改写。
但是,即使使用select()/ FD_ISSET也可以提高性能。
这里是如何完成的:在winsock2.h中,fd_set被定义为一个SOCKET数组和一个元素计数器
typedef struct fd_set { u_int fd_count; /* how many are SET? */ SOCKET fd_array[FD_SETSIZE]; /* an array of SOCKETs */ } fd_set;
同样在winsock2.h中,你会发现FD_SET在这个数组的末尾添加一个SOCKET,FD_ISSET在数组中进行线性搜索。
现在,如果您更改宏使用SOCKET的排序数组,即
FD_SET按排序顺序添加套接字
FD_ISSET执行二分搜索而不是线性搜索
那么依赖于数组FD_ISSET的大小可以大大提高(虽然FD_SET的性能会有所下降,但是我们假设FD_SET很少操作)。
在Unix上,select()的性能更好,因为FD_SET是位图,FD_SET / FD_ISSET只是测试或设置一点。 在Windows上,这种技术不适用,因为套接字不是一个小的正面文件描述符号,而是一个HANDLE,句柄的标量值可能很大。
AF_UNIX套接字开销?
我看到有一对AF_UNIX套接字通过调用创build一对奇怪的东西,例如:
socketpair(AF_UNIX,SOCK_STREAM,sfd);
其中sfd是文件描述符的int [2]数组。
首先,默认缓冲区大小似乎是122K(124928字节),而不是来自/ proc / sys / net的任何内容(例如设置为128K的wmem_default)。 有谁知道这个奇怪的缓冲区大小的原因?
其次,通过套接字(8字节)写小信息。 在写块之前我只能写423个字节,只有8 * 423 = 3384个字节,还有一个奇怪的大小。 这些消息就好像它们每个都占用了295+个小字节。 这种开销的来源是什么?
SIGIO到达文件描述符我没有设置它,当没有IO是可能的
通过共享内存IPC在进程之间共享指针
谷歌地图不正确加载在网页浏览器控制
我可以列出来自核心转储的所有VTable指针吗?
检查CTRL + ALT + DEL屏幕是否可见的其他方法
在RHEL6上运行(2.6.32,64位)
我编写了一个程序来尝试不同大小的数据来比较开销成本:
#include <errno.h> #include <stdio.h> #include <stdint.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #define DATA_SIZE 4 void run(size_t size) { int sfd[2]; if (socketpair(AF_UNIX,sfd) == -1) { perror("error"); } int sndbuf,sbsize = sizeof(sndbuf); getsockopt(sfd[0],SOL_SOCKET,SO_SNDBUF,&sndbuf,(socklen_t*)&sbsize); printf("Data Size: %zdn",size); char buff[size]; size_t wrote=0; for (size_t ii=0; ii < 32768; ii++) { if ((send(sfd[0],buff,size,MSG_DONTWAIT) == -1) && (errno == EAGAIN)) { wrote = ii; break; } } printf("Wrote: %zdn",wrote); if (wrote != 0) { int bpm = sndbuf/wrote; int oh = bpm - size; printf("Bytes/msg: %in",bpm); printf("Overhead: %in",oh); printf("n"); } close(sfd[0]); close(sfd[1]); } int main() { int sfd[2]; socketpair(AF_UNIX,sfd); int sndbuf,(socklen_t*)&sbsize); printf("Buffer Size: %inn",sndbuf); close(sfd[0]); close(sfd[1]); for (size_t ii=4; ii <= 4096; ii *= 2) { run(ii); } }
这使:
Buffer Size: 124928 Data Size: 4 Wrote: 423 Bytes/msg: 295 Overhead: 291 Data Size: 8 Wrote: 423 Bytes/msg: 295 Overhead: 287 Data Size: 16 Wrote: 423 Bytes/msg: 295 Overhead: 279 Data Size: 32 Wrote: 423 Bytes/msg: 295 Overhead: 263 Data Size: 64 Wrote: 423 Bytes/msg: 295 Overhead: 231 Data Size: 128 Wrote: 348 Bytes/msg: 358 Overhead: 230 Data Size: 256 Wrote: 256 Bytes/msg: 488 Overhead: 232 Data Size: 512 Wrote: 168 Bytes/msg: 743 Overhead: 231 Data Size: 1024 Wrote: 100 Bytes/msg: 1249 Overhead: 225 Data Size: 2048 Wrote: 55 Bytes/msg: 2271 Overhead: 223 Data Size: 4096 Wrote: 29 Bytes/msg: 4307 Overhead: 211
与使用pipe道相比,这肯定有很多开销:
Data Size: 4 Wrote: 16384 Bytes/msg: 4 Overhead: 0 Data Size: 8 Wrote: 8192 Bytes/msg: 8 Overhead: 0 Data Size: 16 Wrote: 4096 Bytes/msg: 16 Overhead: 0 Data Size: 32 Wrote: 2048 Bytes/msg: 32 Overhead: 0 Data Size: 64 Wrote: 1024 Bytes/msg: 64 Overhead: 0 Data Size: 128 Wrote: 512 Bytes/msg: 128 Overhead: 0 Data Size: 256 Wrote: 256 Bytes/msg: 256 Overhead: 0 Data Size: 512 Wrote: 128 Bytes/msg: 512 Overhead: 0 Data Size: 1024 Wrote: 64 Bytes/msg: 1024 Overhead: 0 Data Size: 2048 Wrote: 32 Bytes/msg: 2048 Overhead: 0 Data Size: 4096 Wrote: 16 Bytes/msg: 4096 Overhead: 0
最佳的OS应用程序出站SMTP数据包捕获?
_GNU_SOURCE和__USE_GNU
Libtool只创build静态库 – 我需要共享对象
限制并发线程的数量(使用pthreads)
SIGSTOP不能在c程序中工作
看看插座(7)手册页。 有一部分内容如下:
SO_SNDBUF设置或获取以字节为单位的最大套接字发送缓冲区。 当使用setsockopt(2)设置内核时,内核将此值加倍(以允许空间用于簿记开销),并且getsockopt(2)返回此加倍的值。 缺省值由/ proc / sys / net / core / wmem_default文件设置,最大允许值由/ proc / sys / net / core / wmem_max文件设置。 该选项的最小值(加倍)是2048。
所以看起来开销只是为内核保存簿记信息。
你看过net.unix.max_dgram_qlen sysctl的值吗?
内核对正在进行的AF_UNIX数据报的最大数量施加了限制。 在我的系统上,极限实际上是非常低的:只有10。
c – 在Windows 7中创建POSIX应用程序?
我有Visual Studio 2012.我试图编译一个“hello world”Posix应用程序,它似乎缺少了入口点:
>cl stuff.cpp /Fostuff.obj /link /subsystem:posix
LINK : error LNK2001: unresolved external symbol __PosixProcessstartup
unlink.exe : Fatal error LNK1120: 1 unresolved externals一些谷歌搜索显示我需要psxdll.lib和其他一些库,但它们在哪里? Visual Studio没有它们,最新的Windows SDK也没有.他们是否悄悄地杀死了创建POSIX应用程序而不告诉任何人的能力?
解决方法
http://www.microsoft.com/en-us/download/details.aspx?id=2391
Until the download package Utilities and Software Development Kit for Subsystem for UNIX-based Applications (Utilities and SDK for SUA) has been installed on the computer,you cannot run or modify UNIX-based scripts and custom UNIX-based applications.
cygwin Windows套接字编程
我从网上拿了一个示例程序并尝试编译但是无法这样做….同样的代码是
#include <w32api/windows.h> #include <w32api/winsock.h> #include <stdio.h> int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmd,int nShow) { WORD sockVersion; WSADATA wsaData; int nret; sockVersion = MAKEWORD(1,1); // We'd like Winsock version 1.1 // We begin by initializing Winsock WSAStartup(sockVersion,&wsaData); // rest part of code }
我在cygwin环境中使用gcc-3编译它并得到非常奇怪的错误…..
undefined reference to '_WSAStartup08' and many such errors...
我从教程网站上获取了代码,因此想知道我错了什么,我应该如何运行该程序.
非常感谢..
编辑———
我也尝试使用winsock2而不是winsock.h,但错误仍然存在……
解决方法
但是,Cygwin在winsock之上有自己的POSIX兼容套接字实现,通常混合起来并不是一个好主意.如果你想坚持使用winsock,你可能想要使用gcc-3的-mno-cygwin选项,它将Cygwin DLL排除在等式之外. (您还需要从#include行中删除w32api /.)
Docker与一个nginx和一个共享一个UNIX套接字的uwsgi容器
首先,对于文本的墙壁感到抱歉。
我试图让我的Flask应用程序与Docker一起运行,思路是“每个容器一个服务”,所以我真的想在一个容器中运行Nginx,在一个容器中运行uWsgi,所以如果我想要更新至。
这是我的相关文件夹结构:
搬运工根文件夹
Nginx的
网站启用/
SSL /
Dockerfile
Nginx.conf
uwsgi_params
uwsgi
应用程序/
app.ini
Dockerfile
Nginx的Dockerfile:
如何使用Nginx服务Flask静态文件?
UndefinedError:'user'未定义
Nginx和Flask-socketio Websockets:活着但不是消息?
configurationNginx服务器到python烧瓶应用程序
Nginx错误:(13:权限被拒绝),当连接到上游
FROM connexiolabs/alpine-Nginx:1.7.11 RUN mkdir /etc/ssl/botillsammans copY ./ssl/dhparams.pem /etc/ssl/botillsammans copY ./ssl/botillsammans.klumpen.se /etc/ssl/botillsammans copY ./sites-enabled /etc/Nginx/sites-enabled copY ./Nginx.conf /etc/Nginx/Nginx.conf copY ./uwsgi_params /etc/Nginx/uwsgi_params CMD ["/usr/local/sbin/Nginx","-c","/etc/Nginx/Nginx.conf"]
唯一启用的Nginx网站(称为www):
upstream flask { server unix:///tmp/app.sock; } server { listen 443 ssl; server_name botillsammans.klumpen.se; access_log /var/log/Nginx/botillsammans.access.log; error_log /var/log/Nginx/botillsammans.error.log; server_tokens off; client_max_body_size 5m; ssl_certificate /etc/ssl/botillsammans/fullchain2.pem; ssl_certificate_key /etc/ssl/botillsammans/privkey2.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; # disable SSLv3 ssl_protocols TLSv1.2 TLSv1.1 TLSv1; ssl_prefer_server_ciphers on; ssl_ciphers '........'; ssl_dhparam /etc/ssl/botillsammans/dhparams.pem; add_header Strict-Transport-Security max-age=15768000; ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/ssl/botillsammans/chain2.pem; resolver 8.8.8.8 8.8.4.4 valid=86400; resolver_timeout 10; location / { include /etc/Nginx/uwsgi_params; uwsgi_pass flask; } }
uWsgi的Dockerfile:
FROM my-own-app-base RUN mkdir -p /app/backend RUN mkdir -p /app/frontend/prod copY ./app/backend /app/backend copY ./app/frontend/prod /app/frontend/prod copY ./app/wsgi.py /app RUN mkdir /uwsgi copY ./app.ini /uwsgi workdir /uwsgi CMD ["uwsgi","--thunder-lock","--ini","/uwsgi/app.ini"]
我的app.ini(uWsgi文件):
[uwsgi] config_base = /tmp app_base = /app chmod-socket = 777 socket = %(config_base)/app.sock pidfile = %(config_base)/app.pid stats = %(config_base)/app.stats.sock chdir = %(app_base) wsgi-file = wsgi.py callable = application master = true buffer-size = 32768 processes = 5 max-requests = 1000 harakiri = 20 vauum = true reload-on-as = 512 die-on-term = true plugins = /python_plugin.so
一个有趣的事情是,如果我进入正在运行的uWsgi容器,更改Flask应用程序的端口并运行uwsgi --ini /uwsgi/app.ini ,请按Ctrl + C一次,然后应用程序将启动并按预期工作(即,我可以访问浏览器中的网站,一切正常)。
我的docker-compose.yml文件:
uwsgi: restart: always build: ./uwsgi volumes: - /uwsgi - /tmp Nginx: restart: always build: ./Nginx volumes_from: - uwsgi
来自Docker日志的日志:
uwsgi_1 | [uWsgi] getting INI configuration from /uwsgi/app.ini uwsgi_1 | *** Starting uWsgi 2.0.11.2 (64bit) on [Tue May 10 19:13:13 2016] *** uwsgi_1 | compiled with version: 5.2.0 on 29 October 2015 23:59:33 uwsgi_1 | os: Linux-3.19.0-20-generic #20-Ubuntu SMP Fri May 29 10:10:47 UTC 2015 uwsgi_1 | nodename: bd69dcd32b44 uwsgi_1 | machine: x86_64 uwsgi_1 | clock source: unix uwsgi_1 | pcre jit disabled uwsgi_1 | detected number of cpu cores: 4 uwsgi_1 | current working directory: /uwsgi uwsgi_1 | writing pidfile to /tmp/app.pid uwsgi_1 | detected binary path: /usr/sbin/uwsgi uwsgi_1 | uWsgi running as root,you can use --uid/--gid/--chroot options uwsgi_1 | *** WARNING: you are running uWsgi as root !!! (use the --uid flag) *** uwsgi_1 | chdir() to /app uwsgi_1 | your processes number limit is 524288 uwsgi_1 | your memory page size is 4096 bytes uwsgi_1 | *** WARNING: you have enabled harakiri without post buffering. Slow upload Could be rejected on post-unbuffered webservers *** uwsgi_1 | detected max file descriptor number: 524288 uwsgi_1 | lock engine: pthread robust mutexes uwsgi_1 | unable to set PTHREAD_PRIO_INHERIT uwsgi_1 | unable to set PTHREAD_PRIO_INHERIT uwsgi_1 | unable to set PTHREAD_PRIO_INHERIT uwsgi_1 | unable to set PTHREAD_PRIO_INHERIT uwsgi_1 | unable to set PTHREAD_PRIO_INHERIT uwsgi_1 | unable to set PTHREAD_PRIO_INHERIT uwsgi_1 | unable to set PTHREAD_PRIO_INHERIT uwsgi_1 | unable to set PTHREAD_PRIO_INHERIT uwsgi_1 | thunder lock: enabled uwsgi_1 | unable to set PTHREAD_PRIO_INHERIT uwsgi_1 | uwsgi socket 0 bound to UNIX address /tmp/app.sock fd 3 uwsgi_1 | Python version: 2.7.11 (default,Jan 23 2016,12:34:14) [GCC 5.3.0] uwsgi_1 | *** Python threads support is disabled. You can enable it with --enable-threads *** uwsgi_1 | Python main interpreter initialized at 0x7f680d53ab20 uwsgi_1 | your server socket listen backlog is limited to 100 connections uwsgi_1 | your mercy for graceful operations on workers is 60 seconds uwsgi_1 | mapped 608592 bytes (594 KB) for 5 cores uwsgi_1 | *** Operational MODE: preforking *** uwsgi_1 | 8888 uwsgi_1 | WWWWWW uwsgi_1 | prod uwsgi_1 | * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
我注意到这些日志消息不会显示出来(就像我们按照上面的指示启动另一个uWsgi实例一样):
Wsgi app 0 (mountpoint='') ready in 9 seconds on interpreter 0x7f6285a21b80 pid: 17 (default app) *** uWsgi is running in multiple interpreter mode *** spawned uWsgi master process (pid: 17) spawned uWsgi worker 1 (pid: 24,cores: 1) spawned uWsgi worker 2 (pid: 25,cores: 1) spawned uWsgi worker 3 (pid: 26,cores: 1) spawned uWsgi worker 4 (pid: 27,cores: 1) spawned uWsgi worker 5 (pid: 28,cores: 1) *** Stats server enabled on /tmp/app.stats.sock fd: 17 ***
这两个容器只以root身份运行,一切都由root拥有。 我知道,不安全,我会改变这一切,当我得到一切运行,承诺。
所以我想我的问题是为什么不能uWsgi完全启动?
编辑#1:
wsgi.py文件(我知道我可以删除if语句,它只是在testing时给我的):
#!/usr/bin/env python # coding=utf-8 from backend.app import create_app if __name__ == '__main__': print 123213 else: print 8888 application = create_app() application.run(host='0.0.0.0',port=8080,debug=True,use_reloader=False)
在前面的文本中调用的create_app函数:
def create_app(config_object=ProdConfig): config = 'dev' if config_object.ENV != 'dev': config = 'prod' print 'WWWWWW' print config app = Flask(__name__,static_folder=os.getcwd() + '/frontend/' + config,static_url_path='/s') app.config.from_object(config_object) return app
FlaskApp使用mod_wsgi在apache中返回http 500
Flask + uwsgi + Nginx:内存何时发布?
Gunicorn和烧瓶蓝图
上传大文件Nginx + uwsgi
Gunicorn未能加载Flask应用程序
所以事实证明这是一个简单的解决方法,所需要的只是将wsgi.py文件更改为:
#!/usr/bin/env python # coding=utf-8 from backend.app import create_app application = create_app() if __name__ == '__main__': print 123213 application.run(host='0.0.0.0',use_reloader=False) else: print 8888
这是因为uWsgi会调用application并创建自己的本地Wsgi服务器。 感谢一大堆@warmoverflow !
我们今天的关于Windows posix套接字性能和windows套接字是什么意思的分享就到这里,谢谢您的阅读,如果想了解更多关于AF_UNIX套接字开销?、c – 在Windows 7中创建POSIX应用程序?、cygwin Windows套接字编程、Docker与一个nginx和一个共享一个UNIX套接字的uwsgi容器的相关信息,可以在本站进行搜索。
本文标签: