Цитата:
Сообщение от caseyryan
В джаве даже циклы в отдельных потоках выполняются
|
То есть, если мне нужно 10К пользователей онлайн держать - нужно расчитывать на сервер с 8 гигами оперативной памяти? У меня при меньшем количестве банально не инциализируется пул потоков - JVM выдает сообщение, что мало памяти. Кроме того, время от времени бывает что сервер падает с ошибкой вроде "The crash happened outside the Java Virtual Machine in native code". Пошарился на формуах - говорят, что либо использую слишком много памяти, либо кончились свободные порты - последнее навряд ли, но так уж мне ответили

.
А что касается платежей - написал сейчас класс для чтения http запросов на сокетах, и хочу протестировать одну фичу. При помощи iptables можно настроить редирект с одного порта на другой. Может кто-то знает, как при этом указать диапазон IP-адресов, для которых будет выполняться это правило? Чтобы все, кроме ВК, работало нормально с веб-интерфйесом, а запросы от ВК перенаправлялись уже Java-серверу.
P.S. Вроде нашел решение:
-A PREROUTING -s 188.0.64.152/32 -p tcp -m tcp --dport 801 -j DNAT --to-destination :80
-A POSTROUTING -s 188.0.64.152/32 -p tcp -m tcp --dport 801 -j SNAT --to-source :80
В примере данные для 188.0.64.152 с 801 порта перенаправляются на 80 - сделал так для теста, поставил свой IP, при обращении к 801 порту увидел веб-интерфейс. Теперь осталось только узнать, с одного ли IP приходят запросы информации о товаре с ВК. А картинку для товара, как я понимаю, будет запрашивать уже клиент, со своим IP.
Добавлено через 7 часов 32 минуты
Вопрос к тем, кто уже сделал/разобрался. Я верно понял алгоритм(рассмотрим простой случай - перевод голосов):
1. Приходит order_status_change
2. Смотрим статус, если chargeable идем дальше
3. Проверяем, нет ли этого order_id в нашей БД, если нет - добавляем и отправляем подтверждение, если есть - просто отправляем пакет с подтверждением(в документации написано, что оно может приходить несколько раз)?
Интересно, где в такой схеме лучше всего производить покупку товара, то есть модификацию записи о наличии товара/размере счета пользователя в БД. По прибытии пакета chargeable явно не вариант - пользователь может нажать на кнопку "Оплатить", и быстро закрыть окно оплаты - в итоге клиенту придет только onOrderCancel, и все. Скорее всего, нужно после отработки на стороне клиента onOrderSuccess отправлять на сервер подтверждение с order_id и app_order_id(возможно - еще и UID пользователя), опять смотреть в БД - есть ли там такой платеж, и только после этого переводить игровую валюту/выдавать товар. Верно ли я понял, или нужно все делать не так?