Клиент сокета Php - сервер сокета С#

Я разрабатываю систему, состоящую из веб-сервера Php и программы C#. Они оба работают на одном хосте. Веб-сервер получает данные от клиентов (мобильных устройств), затем обновляет базу данных и иногда должен уведомлять программу C#. Для этого я открываю клиент сокетов на стороне Php, а затем подключаюсь к серверу сокетов на стороне программы C#, например:

(сторона веб-сервера Php)

1) process HTTP Request from clients

2) update data to database

3) if need to notify C# program (depending on received data)
    3.1) open a socket client (localhost, 8888)
    3.2) send data
    3.3) close socket

До сих пор наша система работала достаточно хорошо с небольшим количеством клиентов (для тестирования), но я не уверен в случае большого количества клиентов.

Любой может дать мне несколько комментариев, чтобы увеличить производительность!


person duong_dajgja    schedule 12.02.2014    source источник
comment
Прежде всего, в чем конкретно проблема? Плохая производительность для большого (какого количества?) клиентов? Идея заключалась бы в том, чтобы использовать решение для обмена сообщениями, такое как RabbitMQ, и делать pub/sub.   -  person alexn    schedule 12.02.2014
comment
Допустим, наша система хочет обслужить 1000 клиентов за 1 секунду. Как вы думаете, есть ли какие-то большие проблемы в моем дизайне (что-то вроде горлышка бутылки)? А у вас есть идея получше решить такую ​​проблему? Во всяком случае, как и ваша рекомендация «RabbitMQ».   -  person duong_dajgja    schedule 12.02.2014


Ответы (1)


Сокеты относительно очень быстрые; связанный с использованием сообщения Q. Socket сам по себе не будет подавляться; ваша единственная программа на C# должна справляться с нагрузкой; в противном случае сообщения продолжали бы накапливаться, и в конечном итоге вызовы отправки сокетов начали бы резервироваться.

Системы Message Q — это системы, предназначенные для того, что вы пытаетесь сделать здесь — они предоставляют промежуточное программное обеспечение, которое позволяет отправлять и получать сообщения. Они предлагают такие вещи, как восстановление, гарантированную доставку, позволяют масштабировать (скажем, с помощью нескольких программ-получателей C#) и т. д. Вы можете посмотреть на них.

Если вы слишком беспокоитесь о производительности сокетов, вы можете использовать какое-то межпроцессное взаимодействие, детали которого зависят от ОС. Такие вещи, как разделяемая память, каналы и т. д. Обычно все они, включая сокеты, достаточно быстры, чтобы вы не заметили большой разницы при обычном рутинном использовании. Разница будет заметна только при очень высоких ставках.

Вы также можете посмотреть на такие вещи, как базы данных памяти. PHP записывает его в БД памяти; Программа С# считывает БД в памяти

person Amit    schedule 12.02.2014
comment
Это правильно человек! Что меня беспокоит, так это производительность сокета. Я рассмотрю базы данных памяти. Это кажется хорошим для моей системы. - person duong_dajgja; 12.02.2014