小编smw*_*dia的帖子

WebSocket服务器如何处理多个传入连接请求?

根据这里:

HTTP Upgrade标头请求服务器将应用层协议从HTTP切换到WebSocket协议.

客户端握手在IE10和服务器之间建立了HTTP-on-TCP连接.在服务器返回其101响应之后,应用层协议从HTTP切换到使用先前建立的TCP连接的WebSockets.

此时HTTP完全脱离了图片.使用轻量级WebSocket线协议,任何端点现在都可以随时发送或接收消息.

所以,我的理解是,在第一个客户端完成与服务器的握手后,服务器的80端口将被WebSocket协议垄断.并且HTTP不再在80端口上运行.

那么第二个客户端如何与服务器交换握手.所有WebSocket握手都是HTTP格式.

添加1

谢谢你到目前为止的所有答案.他们真的很有帮助.

现在我明白同一台服务器的80端口是由多个连接共享TCP.这种共享完全没问题,因为TCP连接是由5元素元组标识Jan-Philip Gehrcke出来的.

我想补充几点想法.

这两个WebSocketHTTP仅仅是应用层协议.通常他们都依赖TCP协议作为他们的运输.

为什么选择80端口?

WebSocket设计有意为握手和后续通信选择服务器的端口80 .我认为设计人员希望从传输级别的角度 WebSocket通信看起来像普通的HTTP通信(即服务器端口号仍然是80).但根据jfriend00答案,这个技巧并不总是欺骗网络基础设施.

协议如何从HTTP转移到WebSocket

来自RFC 6455 - WebSocket协议

基本上,考虑到Web的限制,它应尽可能地将原始TCP暴露给脚本.它的设计也使其服务器可以与HTTP服务器共享一个端口,使其握手成为有效的HTTP升级请求.可以在概念上使用其他协议来建立客户端 - 服务器消息传递,但WebSockets的目的是提供一个相对简单的协议,该协议可以与HTTP和部署的HTTP基础结构(例如代理)共存,并且尽可能安全地接近TCP.在给定安全性考虑的情况下使用此类基础结构,通过有针对性的添加来简化使用并简化简单事务(例如添加消息语义).

所以我认为我在下面的陈述中错了:

握手请求模仿 HTTP请求,但后面的通信没有.握手请求到达端口80上的服务器. 由于它是80端口,服务器将使用HTTP协议对其进行处理.这就是为什么WebSocket握手请求必须是HTTP格式的原因. 如果是这样,我认为必须修改/扩展HTTP协议以识别那些特定于WebSocket的东西.否则它将无法实现它应该屈服于 WebSocket协议.

我认为应该这样理解:

WebSocket通信以从客户端到服务器的有效 …

http websocket spring-websocket

55
推荐指数
3
解决办法
4万
查看次数

如何在Maven settings.xml中设置存储库的顺序

我在settings.xml中有3个存储库,因为我需要来自所有存储库的工件.每当找不到依赖项时,Maven就会尝试

Downloading: http://some.server/mvn2repo/releases/org/apache/lucene/lucene-core/2.9.1/...
[INFO] Unable to find resource 'org.apache.lucene:lucene-core:pom:2.9.1' in repository
Downloading: http://some.server/mvn2repo/3rdParty/org/apache/lucene/lucene-core/2.9.1/...
[INFO] Unable to find resource 'org.apache.lucene:lucene-core:pom:2.9.1' in repository
Downloading: http://repo1.maven.org/maven2/org/apache/lucene/lucene-core/2.9.1/lucene-core-2.9.1.pom
<success>
Run Code Online (Sandbox Code Playgroud)

所有存储库,但大多数时候在中心(repo1)找到工件.我希望Maven先检查这个回购.我在settings.xml中尝试了声明顺序,但是没有用.根据fgysin,我也尝试了相反的顺序,它没有改变任何东西.

我的Maven版本:

C:\>mvn -v
Apache Maven 2.2.1 (r801777; 2009-08-06 21:16:01+0200)
Java version: 1.6.0_15
Java home: C:\Program Files\Java\jdk1.6.0_15\jre
Default locale: de_AT, platform encoding: Cp1252
OS name: "windows vista" version: "6.0" arch: "amd64" Family: "windows"
Run Code Online (Sandbox Code Playgroud)

我的 settings.xml

<profiles>
    <profile>
        <id>space</id>
        <repositories>
            <repository>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
                <id>s1-releases</id>
                <name>System One Releases</name>
                <url>http://some.server/mvn2repo/releases</url>
            </repository>
            <repository>
                <releases> …
Run Code Online (Sandbox Code Playgroud)

java dependency-management maven

53
推荐指数
3
解决办法
8万
查看次数

什么是流程和线程?

是的,我读过许多与操作系统相关的资料.我还在读书.但似乎所有这些都是以"抽象"的方式描述过程和线程,这使得他们的行为和逻辑组织得到了很多高层次的阐述.我想知道他们身体上是什么?在我看来,它们只是一些内存中的"数据结构",它们由内核代码维护和使用,以便于程序的执行.例如,操作系统使用一些过程数据结构(PCB)来描述为某个程序分配的过程的各个方面,例如其优先级,地址空间等.这样可以吗?

c++ multithreading operating-system process

51
推荐指数
7
解决办法
2万
查看次数

在IIS 7.x的上下文中,Web应用程序和虚拟文件夹之间有什么区别?

当我部署我的网站时,我发现我可以将文件夹转换为虚拟文件夹或Web应用程序,我对这两个概念完全感到困惑.

  • 为什么有两种不同的类型?

  • 每个人的目的是什么?

iis

51
推荐指数
1
解决办法
4万
查看次数

如何在c中指定64位整数

我正在尝试在C中使用64位整数,但我得到的混合信号是否应该是可能的.

当我执行printf时:

printf("Size of long int:%d\nSize of long long int:%d\n\n",(int)sizeof(long int), (int)sizeof(long long int));
Run Code Online (Sandbox Code Playgroud)

我得到的回应是:

long int的大小:4 long long int的大小:8

这让我觉得long long int有8个字节= 64位.

但是,当我尝试声明以下变量时:

long long int a2 = 0x00004444;
long long int b2 = 0x000044440;
long long int c2 = 0x0000444400;
long long int d2 = 0x00004444000;
long long int e2 = 0x000044440000;
long long int f2 = 0x0000444400004;
long long int g2 = 0x00004444000044;
long long int h2 = 0x000044440000444;
long long int i2 = 0x0000444400004444;
Run Code Online (Sandbox Code Playgroud)

最后4个变量(f2,g2,h2,i2)给出了错误信息: …

c 64-bit sizeof

51
推荐指数
4
解决办法
13万
查看次数

.NET JIT编译的代码在哪里缓存?

.NET程序首先编译为MSIL代码.执行时,JIT编译器会将其编译为本机机器代码.

我想知道:

这些JIT编译的机器代码存储在哪里?它只存储在进程的地址空间中吗?但是由于程序的第二次启动比第一次快得多,我认为即使在执行完成之后,这个本机代码也必须存储在磁盘上.但是哪里?

.net c# clr jit

46
推荐指数
3
解决办法
1万
查看次数

如何理解"RESTful API是无状态的"?

我听说了RESTful API should be stateless. All state info should be kept on client side.

但是当我从网页发出ajax调用时,我注意到会话ID cookie总是被发送到服务器.使用该会话ID,我可以在服务器上获取会话对象.因此,我可以get/set some state info in the session.

这会破坏code of being statelessRESTful API吗?

添加1

(我的问题的背景如下.)

我尝试通过调用RESTful API来实现登录页面以验证用户名和密码.

每次用户尝试访问我的站点的页面时,登录servlet filter将检查该用户的session(这是getSession()被调用的地方),以查看是否存在有效的登录信息.如果没有,登录过滤器会将用户重定向到登录页面.

在登录页面上,使用用户名和密码对服务器上的RESTful API进行ajax调用.根据RESTful API的返回结果,页面上的JavaScript将决定是否让用户进入我的网站.

所以,在这种情况下,我有点必须使用session.

详细代码位于此处: 此登录逻辑是否通过RESTful呼叫声音?

rest

45
推荐指数
1
解决办法
4万
查看次数

为什么堆上的内存分配比堆栈上的内存慢?

我多次被告知过这个问题.但我不知道为什么...从堆中分配内存时会涉及多少额外费用?它与硬件有关吗?它与CPU周期有关吗?如此多的猜测,但没有确切的答案......有人可以给我一些细节吗?

就像"放松"所说的那样,Heap数据结构比Stack更复杂.在我看来,一些内存空间在它开始运行时被分配给一个线程作为它的堆栈,而堆由进程内的所有线程共享.这种范例需要一些额外的机制来管理每个线程对共享堆的使用,例如垃圾收集.我对吗?

c stack memory-management

44
推荐指数
3
解决办法
1万
查看次数

什么是"android.R.id.text1"?

我是Android开发的新手.在Notepad示例中,我看到了以下代码段:

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.noteslist_item, cursor,
        new String[] { Notes.TITLE }, new int[] { android.R.id.text1 });
Run Code Online (Sandbox Code Playgroud)

并在notelist_item.xml文件中:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"   <-----------HERE
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:gravity="center_vertical"
    android:paddingLeft="5dip"
    android:singleLine="true"
/>
Run Code Online (Sandbox Code Playgroud)

所以,我想知道,这是android.R.id.text1什么?

另外,我发现android.R.id.button1,button2,button3将在android.jar文件中.

它们是某些第三方控件的某种众所周知的ID吗?

谢谢

android

44
推荐指数
2
解决办法
6万
查看次数

xmlns,xmlns:xsi,xsi:schemaLocation和targetNamespace?

对于以下XML片段:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
Run Code Online (Sandbox Code Playgroud)

什么的xmlns,xmlns:xsixsi:schemaLocation属性究竟是什么意思?它们有什么关系?有什么:用?

并且有2个网址 xsi:schemaLocation=

  1. http://maven.apache.org/POM/4.0.0 (它恰好相同xmlns但访问时出现404错误.)
  2. http://maven.apache.org/xsd/maven-4.0.0.xsd (这是一个实际的XSD文档)

如果1不存在,为什么还要把它放在那里?

xml xsd xml-namespaces xml-validation xsd-validation

43
推荐指数
2
解决办法
3万
查看次数