Socket almacena los datos que recibe

Tengo una aplicación .NET de cliente y una aplicación .NET de servidor, conectadas a través de sockets.

El cliente envía una cadena de 20 o más caracteres cada 500 milisegundos.

En mi máquina de desarrollo local, esto funciona perfectamente, pero una vez que el cliente y el servidor están en dos servidores diferentes, el servidor no recibe la cadena inmediatamente cuando se envía. El cliente todavía envía perfectamente, lo he confirmado con Wireshark. También he confirmado que el servidorhace Recibe las cadenas cada 500 milisegundos.

El problema es que mi servidorsolicitud que está esperando que el mensaje solo reciba el mensaje cada 20 segundos aproximadamente, y luego recibe todo el contenido de esos 20 segundos.

Uso sockets asíncronos y, por alguna razón, la devolución de llamada no se invoca más de una vez cada 20 segundos.

EnAcceptCallback establece la conexión y llamadaBeginReceive

handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);

Esto funciona en mi máquina local, pero en mi servidor de producción el ReadCallback no ocurre inmediatamente.

El BufferSize está establecido en 1024. También intenté configurarlo en 10. Hace una diferencia en la cantidad de datos que leerá del socket una vez que se invoca el ReadCallback, pero ese no es realmente el problema aquí. Una vez que invoca ReadCallback, el resto funciona bien.

Estoy usando microsoftsEjemplo de servidor asíncrono para que pueda ver cómo se ve mi método ReadCallback.

¿Cómo puedo obtener la devolución de llamada BeginReceive inmediatamente cuando los datos llegan al servidor?

-

ACTUALIZAR

Esto ha sido resuelto. Fue porque el servidor tenía un solo procesador y un solo núcleo. Después de agregar otro núcleo, el problema se resolvió instantáneamente. Ahora se llama a ReadCallback inmediatamente cuando la llamada pasa al servidor.

Gracias a todos por sus sugerencias!

Respuestas a la pregunta(3)

Su respuesta a la pregunta