|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
|
Php сокеты25.02.2013, 20:09. Показов 4853. Ответов 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 и сокеты Сокеты Сокеты Сокеты Сокеты и сессии Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|