|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
|
Php сокеты25.02.2013, 20:09. Показов 4883. Ответов 26
Метки нет (Все метки)
Здравствуйте.
Столкнулся с таким вопросом, как php сокеты(php_sockets.dll). Думаю использовать эту финчу, для реализации обмена сообщениями, между пользователями. Вопрос. Можно ли подключить к "прослушивающему" серверу, сразу несколько клиентов так, чтобы не было между ними путаницы? То есть, например, к серверу подключено, скажем 10 человек, но чтобы Петя, получал сообщения только от своего друга Васи, а Вася от Пети. То есть, какая-то индентификаци, между пользователями. Похожая ситуация, есть в приватном чате. Когда два человека, ведут диалог, а отправляемые ими сообщения, всплывают в чате у обоих одновременно.
0
|
|
| 25.02.2013, 20:09 | |
|
Ответы с готовыми решениями:
26
PHP и сокеты
|
|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
|||
| 26.02.2013, 13:10 | |||
|
Ну и слать соответственно по этому числу.
1
|
|||
|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
|
| 26.02.2013, 15:55 [ТС] | |
|
То есть я так понимаю, к серверу, любой из клиентов, подключается по одному и тому же ip и порту, который в свою очередь, постоянно прослушивается сервером. Каждый из этих клиентов, пересылает на сервер, свой уникальный id и id пользотеля, которому он адресует свое сообщение. А сервер уже перехватывает эти id и производит соответствующие панипуляции. Правильно все понял?:-)
0
|
|
|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
||
| 26.02.2013, 16:24 | ||
|
Если это будет js чат то можно юзать вэб сокеты и их аналоги для других браухеров. Лучше почитайте на тему comet серверов. Можно найти много готовых реший для демонстрации. Например socket.io (js), tornado (python), node.js Как вариант можно для клиента использовать socket.io а для сервера node.js. https://github.com/learnboost/socket.io
1
|
||
|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
|||
| 26.02.2013, 17:29 [ТС] | |||
Вот у и меня и возникли два вопроса: 1. Подключение всех пользователей, к одному и тому же прослушивающему серверу. 2. Идентификация пользователей, чтобы не было путаницы.
0
|
|||
|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
|
| 26.02.2013, 17:31 [ТС] | |
|
В общем то картина начинает проясняться. Еще один вопрос. Что если этих пользователей, будет миллион, как с этим будет справляться сервер? Пакеты с данными, ведь отправляются последовательно...
0
|
|
|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
|||
| 26.02.2013, 17:39 | |||
|
Просто TCP сокет юзать есть смысл только со своим протоколом. А так вы получите HTML протокол на входе в сокете. Добавлено через 7 минут Даже если бы заюзать много сокетов и подключить столько коннектов, а это чат в котором все пишут, это будет такой трафик, что канала просто может не хватить, а если ещё и строки парситься будут то и процессора ![]() + каждый коннект может быть структурой, например хранить даже просто сокет 2 байта + ид юзера 4 байта + имя юзера пусть байт 30. При этом минимуме вы уже получите 1 000 000 * 36 = 36 000 000 байт = 34 Гб озу только под структуры, а реальная цифра будет гораздо больше. Нужно делать кластер для такого количества.
1
|
|||
|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
||||
| 26.02.2013, 17:59 [ТС] | ||||
Я раньше думал, просто повесить Аякс запрос на выполнение через каждые 5-10 секунд. Который проверяет, скажем, если появилось новое сообщение в базе, то добавляем его в чат. Но как-то мне это показалось не совсем правильным. Незнаю, возможно эти вещи можно сделать более легкими способами. Просто я далеко не все знаю в программировании. Добавлено через 1 минуту
Добавлено через 6 минут Нужно то по идее, связать двух пользователей, обшим(между ними) чатом.:-) Добавлено через 5 минут
0
|
||||
|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
||||||||||
| 26.02.2013, 18:16 | ||||||||||
|
Вы передадите на неё данные по HTTP протоколу. Протокол это как ра описание офрмата данных который идёт по верх протокола TCP. Вы получите на входе в сокете просто текст, который нужно парсить в соответствии с протоколом HTTP. А этим как правило занимаются вэб сервера типа nginx или apache. То есть вам придёт в сокет такой текст
И аякс конектится будет к тому же сокету на котором сайт, к другим портам не разрешит политика безопасности, например в опере. А на том же порте вы сокет не откроете, так как он занят вэб сервером. Значит Вам нужен прокси, а нгинкс не проксирует вэб сокет. А если это просто ajax вы получите как я писал выше HTTP протокол. Вообщем для аякса не нужны сокеты в пхп, нужен просто скрпит, страничка сайта, которая будет отдавать json обратно в ajax. О сокетах читайте теорию, что такое TCP что такое протоклы по верх TCP, и как можно установить постоянное соединение из браузера. Сделайте хоть как то, и изучайте как оно работает, постепенно переходите на новое, что изучили. Нельзя вот так не понимая что такое сокет и что такое протокол, взять и в теме на форуме узнать как сделать сайт на 1кк коннектов ![]()
1
|
||||||||||
|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
||||
| 26.02.2013, 18:43 [ТС] | ||||
![]()
Добавлено через 8 минут Окей, хорошо. Давайте на время забудем про сокеты. ![]() Есть задача, соединить двух юзеров, в "чате". Можно это назвать или чатом, или просто диалогом. Чтобы каждое новое сообщение, от любого из них, появлялось сразу же, на обоих машинах, по мере поступления. Без перезагрузки страницы. Какое оптимальное решение, вы можете предложить для реализации данной задачи? Soket.io я уже рассматривал. Мне показалось немного сложновато для меня. В каком направлени посоветуете идти?:-) И конечно же, чтобы это все было рассчитано не на 30 пользователей, а на целый миллион. С запасом так сказать. Играть так по крупному. Мы не рассчитываем на низкий результат, а целимся на перспективный рост создаваемого ресурса.:-) Добавлено через 9 минут Не по теме:
0
|
||||
|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
|||
| 26.02.2013, 18:56 | |||
и дело не в самом socket.io, а в том что раз оно сложно, то вам ещё рано замахиваться на кластерные сайты.node.js сложно, socket.io сложно, а дальше будет ещё сложнее... Вам ещё нужно настроить балансировщик нагрузки, проксирующий web socket. А так же балансировку между серверами можно сделать на уровне днс. Ну и купить несколько серверов или взять в аренду, если простые то по 4-5к рублей/месяц, если с защитой от ддос, то 30к за сервер. Вы готовы их арендовать?) Сделайте простой long poll. Вот как только не будет хватить вам конектов на выделенном core i7 например сервере, тогда продолжим тему
1
|
|||
|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
|||
| 26.02.2013, 21:43 [ТС] | |||
Добавлено через 2 часа 43 минуты У меня возник вопрос, относительно Comet. В сервеной части, стоит постоянный цикл, проверяющий произошедшие изменения, скажем, каждые 5 секунд. Если произошли какие-то изменения, то посылаются данные к клиенту. А собственно использование этого цикла, не загружает сервер или процессор сервера? Просто я подумал, если будут у меня там 50 пользователей сидеть и на каждого будет по одному циклу запущено...
0
|
|||
|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
|||
| 26.02.2013, 23:50 | |||
|
Но как я написал выше, имхо это не верный подход. Суть комет сервера что вы получается практически мгновенные сообщения от сервера, сразу по приходу, а вы хотите просто 5 секундную задержку перенести с клиента на сервер. Ну а пока висит на sleep'е - нагрузка на процессор 0. И так как у пхп нет многопоточночти, то при слипе хотя бы 1го цикла у вас весь сервер будет висеть и даже данные не получит.
1
|
|||
|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
||||||||
| 27.02.2013, 00:06 [ТС] | ||||||||
А comet разве не на цикле основан? Вот в этой статье у автора стоит цикл, проверяющий наличие новых данных: http://spectrox.ru/blog/comet-theory-beginning/
0
|
||||||||
|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
||
| 27.02.2013, 00:23 | ||
|
А это что хорошая статья? Вы всё что написано в интернете принимаете за истину?
![]() Ну сами подумайте, вконтакте или в любом другом чате на комет или лонг полл у крупных сайтов есть задерка 5 сек? Я не замечал) Сообщение сразу рассылается. Вам нужно в цикле спать не по слипу а по select. Это будет ждать активности в сокете и пока её нет поток будет спать, как только она появилась вы читаете пришедшие данные и вызываете событие рассылки нужным юзерам, после рассылки вы опять попадаете на select и опять ждёте. У вас не будет ни одного использования функции sleep в коде. Только сейчас понял, что вы делаете не comet. Вы не путайте comet и long poll ![]() comet сервер запущен всегда, он один на всех юзеров и нет переподключений (судя по заголовку статьи, автор сам не очень понимает что он написал...). А вы показали статью реализации long poll. В вашем случае проще всего как раз делать слипы. Пока висит на sleep - нет нагрузки на проц, но в памяти место занимает
1
|
||
|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
||
| 27.02.2013, 00:27 [ТС] | ||
Не по теме: Вы не обращайте особо на мои возможно тупые вопросы. Просто я с этой ху#ней, уже неделю вожусь. Нервный сцука стал на этой почве.:)
0
|
||
|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
||
| 27.02.2013, 00:35 | ||
|
Я же написал что у статьи название кривое. У вас в 1 скрипте только 1 клиент ![]() Так что вы не как в одном цикле не сможете читать всех.
1
|
||
|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
||
| 27.02.2013, 00:48 [ТС] | ||
Сейчас я так понимаю, вы мне советуете делать все таки на основе long poll с циклом который. Окей. Я попробую еще повозиться сегодня. Почитаю мануал про select. Поэксперементирую... А насчет названия моего топика. Дело в том, что на другом форуме читал статью про php сокеты и их использование. Вот и решил начать реализовавывать свою задачу с их помощью. Но в итоге выяснилось, что это полная хрень. Незнаю, может тогда целесообразней как нибудь переименовать топик.
0
|
||
|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
||||
| 27.02.2013, 00:52 | ||||
![]() ![]() Добавлено через 1 минуту
1
|
||||
|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
||
| 27.02.2013, 00:56 [ТС] | ||
![]() ![]() ![]() В общем, мне сейчас держаться того же курса. Делаем на основе цикла со sleеp()'ом. Правильно шагаю?
0
|
||
| 27.02.2013, 00:56 | |
|
Помогаю со студенческими работами здесь
20
PHP, MySQL и сокеты Сокеты Сокеты Сокеты Сокеты и сессии Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|