Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873

Не падающий сервер

14.01.2015, 14:40. Показов 5161. Ответов 84
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собираюсь писать сервер, который должен выдерживать ~100 запросов в секунду
Каждый запрос будет обращаться к бд раза 3-4, писать в файл и отдавать небольшой(пару строк) ответ.
Писал однажды маленький чатик по технологии comet, когда скрипт висел в памяти, пока в бд не произойдет изменение. И получалось, если больше 2 человек пользовались этим чатом, то сайт падал.
Он у меня был на бесплатном хосте radyx, но меня все равно это насторожило.
Прошу объяснить технологию, как написать не падающий сервер.

И несколько вопросов
Возможно ли хранить массив в памяти, который будет доступен каждый раз, при выполнении скрипта? Что бы уменьшить количество обращений в бд.
Какие примерно нужны параметры у хостинга, под мои запросы? и сколько такой хостинг может стоить? обращаться к серверу будут только из СПб. Есть ли смысл искать хостинг, расположенный в СПб, чтобы ускорить процесс доступа?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.01.2015, 14:40
Ответы с готовыми решениями:

падающий снег
помогите мне нарисовать в делфи падающий снег.я не особо шарю в делфи т.к. юзаю си.кто может помогите.заранее спасибо.

Падающий снег
Помогите нарисовать падающий снег . У меня на форме нарисованый домик, ёлка.... нада только падающий снег.... я пробовал нарисовать...

падающий мяч
допустим бросили мячь с высоты 100пикселей написать задачу используя формулы S=v*t, H =100-9.81* t * t/2 после падения мячь должен...

84
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.01.2015, 15:21  [ТС]
Студворк — интернет-сервис помощи студентам
Грубо говоря-да
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
16.01.2015, 15:26

Не по теме:

Цитата Сообщение от Tatikoma Посмотреть сообщение
А где тогда предлагаете задавать вопросы желающим заниматься на PHP не только веб-программированием? =)
Ну так я предлагаю тут, просто уточнять, что возможно не браузер, возможно не хттп :)



Цитата Сообщение от Tatikoma Посмотреть сообщение
никто не мешает отказаться от написания своего сервера
Ну вот по этмоу я ноде и выбрал
Вот весь код отвечающий за запуск приложения и веб сервер
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
// создаем приложение
var app = new App(config.get('version'), io, new UserManager());
 
// принимаем входящие подключения
app.io.on('connection', function(socket) {
    socket.session = new Session(app, socket);
});
 
// сервер
http.listen(config.get('port'), function() {
    Log.i('listening on *:%d', config.get('port'));
});
А дальше всё просто, придумываем название операций, например onSignUp, onComment...

создаём обработчики

JavaScript
1
2
3
4
5
6
7
8
9
10
Session.prototype.onSignUp = function (data) {
    // авторизация юзера
    // данные в data.username и data.password
    // ответ
    socket.emit('signUp', { result: true })
}
 
Session.prototype.onComment= function (data) {
    // добавление коммента
}
и регистрируем хендлеры
JavaScript
1
2
socket.on('signUp', this.onSignUp.bind(this))
socket.on('comment', this.onComment.bind(this))
всё) сервер готов))

в клиенте хоть в мобилке хотьв бразуере надо просто сделать что то вроде
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// коннект
sock = io.connect(...)
 
// слушаем ответы
sock.on('signUp', function (data) {
    if (data.result) {
        // успешно
    } else {
        // ошибка
    }
}).on('....')...
 
// регистрация
sock.emit('signUp', { username: 'Имя', password: 'пароль' });

Добавлено через 56 секунд
Цитата Сообщение от spydark91 Посмотреть сообщение
Грубо говоря-да
Ну тогда вон вам готовый код

Добавлено через 44 секунды

Не по теме:

Нужно будет статейку набростаь ан эту тему на днях)

1
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.01.2015, 15:59  [ТС]
Я просто не понимаю, что такое node js, как он работает, никогда не сталкивался с ним)
Буду признателен, если расскажите
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
16.01.2015, 17:08
Лучший ответ Сообщение было отмечено KOPOJI как решение

Решение

http://nodejs.org/ качаете, устанавливаете, создаете папку, создаете файлик package.json
Code
1
2
3
4
5
6
7
{
  "name": "test-server",
  "version": "0.0.1",
  "description": "Test server",
  "dependencies": {
  }
}
заходите в папку через консоль и пишите
Code
1
2
npm install mysql2 --save
npm install sicket.io --save
это установит мускл и сокет ио
код сервера для примера, с коментами, извините но нет времени ещё подробней расписывать))
это должно показать суть общую, раскинете опфайлам, создадите модельки, и прикрутите бд))
если это чат, то можно хранить в ОЗУ, бзе проблем, добавляете просто строку в бд, на случай если нужна история, а последние 20 сообщений можно и в озу хранить.
server.js
Кликните здесь для просмотра всего текста
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
var app = require('http').createServer(handler)
var io = require('socket.io')(app);
var fs = require('fs');
 
// дока по бд
// [url]https://github.com/sidorares/node-mysql2[/url]
// можно юзать другую, напрмиер
// [url]https://github.com/felixge/node-mysql/[/url]
// обе либы асинхронны и поддерживают пулл коннектов
 
app.listen(1234);
 
function handler (req, res) {
  // тут можно обрабатывать обычные url
  res.end();
}
 
// это сокет ио
// слушаем событие connect
io.on('connection', function (socket) {
    // создаем сессию и передаём в неё подключенный сокет
    socket.session = new Session(socket);
    console.log('client connected');
});
 
// в разных файлах уже пишите логику приложения
// я напишу пример в одном файле
 
// создадим класс сессии, для удобства
var Session = function (socket) {
    // сохраняем сокет в переменной в сессии
    this.socket = socket;
    
    // тут будет юзер после авторизации
    this.user = null;
    
    // подписываемся на события
    // вход юзера
    this.socket.on('signIn', this.onSignIn.bind(this));
    
    // шлём пакет говорящий что подключились
    // можно слать версию и другую информацию...
    this.socket.emit('connection');
};
 
// наши хендлеры
Session.prototype.onSignIn = function (data) {
    // запомним сессию в переменную, так как она нужна в калбеке
    var session = this;
    var user = new User(this);
    user.signIn(data, function (result) {
        // если вошел
        if (result) {
            session.user = user;
        }
        // ответ клиенту
        session.socket.emit('signIn', { result: result });
    });
};
 
// наш юзера
var User = function (session) {
    this.session = session;
    this.username = '';
};
 
User.prototype.signIn = function (data, callback) {
    // выборка с бд...
    // com.query('select ...', fucntion (err, rows) { ... })
    // упростим, допустим вошли, имя юзера в data.username
    
    // так как юзер нужен будет в калбеке от бд, то нужно его куда то записать
    // так как внутри калбеке в this будет уже не юзер
    var user = this;
    if (data.username) {
        user.username = data.username;
        // подписываемся на события
        // вход юзера
        user.session.socket.on('message', user.onMessage.bind(user));
        callback(true);
    } else {
        // не вошел
        callback(false);
    }
};
 
User.prototype.onMessage = function (data, callback) {
    // добавим информацию о том кто написал сообщение
    data.username = this.username;
    // шлём всем подключенным юзерам
    io.sockets.emit('message', data);
};

chat.html
Кликните здесь для просмотра всего текста
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://localhost:1234/socket.io/socket.io.js"></script>
<script>
$(function () {
  // коннект к серверу
  var socket = io('http://localhost:1234');
  
  // слушаем событие connection
  socket.on('connection', function (data) {
    // подключились
    // выводим форму входа
    $('#form-sign-in').show();
  }).on('signIn', function (data) { // ответ на событие входа
    if (data.result) {
      // вошли
      // скрываем форму входа
      $('#form-sign-in').hide();
      // выводим форму чата
      $('#form-chat').show();
      
      // если вошли подпишемся на получение сообщений
      socket.on('message', function (data) {
        $('#chat').append('<div><b>' + data.username + '</b> ' + data.message + '</div>');
      });
      
    } else {
      // не вошли
      alert('Ошибка!');
    }
  });
  
  // клик по кнопке входа
  $('#signInButton').click(function () {
    // шлём пакет входа
    socket.emit('signIn', { username: $('#username').val() });
  });
  
  // клик по кнопке отправки сообщения
  $('#messageButton').click(function () {
    // шлём сообщение
    socket.emit('message', { message: $('#message').val() });
    // очистим поле
    $('#message').val('')
  });
});
</script>
 
<div id="form-sign-in" style="display: none;">
    <input type="text" id="username"/>
    <input type="button" value="вход" id="signInButton"/>
</div>
 
<div id="form-chat" style="display: none;">
    <div id="chat"></div>
    <input type="text" id="message"/>
    <input type="button" value="написать" id="messageButton"/>
</div>

порт нужно будет проксить через какой либо сервер на адрес сайта, типа http://site/chat что бы порт был 80 для браузера, что даст большую кросплатформенность)) например нгинкс подойдёт
Изображения
 
2
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.01.2015, 17:20  [ТС]
DrobyshevAlex,спасибо,но я не про это)
А про то,что вообще такое node js сервер. Это джава скрипт, который интепретируется на сервере?

Добавлено через 37 секунд
И чат - это был просто пример)
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
16.01.2015, 17:31
http://ru.wikipedia.org/wiki/Node.js
Цитата Сообщение от spydark91 Посмотреть сообщение
И чат - это был просто пример)
Так а какая разница пример чата или чего то ещё, тут суть была просто показана.
что такое события, что можно отправить 1му событие или всем, что можно в любой момент подключиться к событию.
а имена событий, и их внутренности обзывайте как хотите)
я вам говорил что я делал нечто похожее на то что вам нужно.

когда будете пистаь сервер, будет по другому код выглядеть наверное)
например подключение отклчюение хендлеров я делал автоматически в зависмости от флага состояния юзера
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    this.handlers = {
        // Guest
        'signUp': new Handler(SESSION_STATUS_GUEST, this.onSignUp.bind(this)),
        'signIn': new Handler(SESSION_STATUS_GUEST, this.onSignIn.bind(this)),
        ...
        
        // SignedIn
        'signOut': new Handler(SESSION_STATUS_SIGNED_IN, this.onSignOut.bind(this)),
        'mark': new Handler(SESSION_STATUS_SIGNED_IN, this.onMark.bind(this)),
        ...
 
        // all
        'getAnnotations': new Handler(SESSION_STATUS_ALL, this.onGetAnnotations.bind(this)),
        'disconnect': new Handler(SESSION_STATUS_ALL, this.onDisconnect.bind(this))
        ...
    };
Так что тут суть то не в чате, а просто в основе, как оно примерено выглядеть может что бы работало))
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.01.2015, 17:45  [ТС]
И то верно)
Да читал я вики, не особо что-то понял)

А верно, что socket.io можно использовать, если сервер не на nodr js. Т.е. эта библиотека просто предоставляет удобную кроссбраузерную работу из js?
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
16.01.2015, 18:08
это библиотека написана на жс, етсь под клиента и под сервера.
но етсь под андроид и под иос сторонние, можете и сами написать свою на чём угодно.
вся суть библиотек в том, что бы не писать велосипеды, а сосредоточиться на конечном продукте

то есть если вам нужно не нод.жс, то вам нужно либо искать готовую серверную часть, либо писать самому.
по сути это просто набок строк кода) естественно вы и на ассемблере можете серверную чатсь написать под неё

Добавлено через 1 минуту
Я ещё раз говорю, хорошо знаете Java? Пишите на нём Я предлагал это только потому тчо мне - под мои задачи это оказалось оптимальным решением, и я знал js что не составило труда написать на нод.жс

Добавлено через 3 минуты
Вот сейчас я пишу сервер под флеш игрушку, пишу не на ноде жс, потмоу что мне не нужен хттп и бразер, а флешка сама по себе с сокетами работает. В результате я сильно экономлю троафик отказавшить от жсон, хмл, хттп и прочих текстовых протоколов.
А если мне нужно под хттп/вебсокеты я выбираю то что для этого задумывалось) то етсь в моем случае нод.жс.

Смотрите на задачу и выбирайте инструмент.
Но вот на чём я бы не стал писать так это на пхп, не потому что он плохой, а потому что у меня ассоциация пхп - простой скриптовый язык, не для создания серверных приложений, а для создания скриптов, для сайта
1
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.01.2015, 21:00  [ТС]
просто я подумываю сервер на яве сделать, а один из вариантов клиента на js, используя эту библиотеку ,т.е. коннектиться не на 80 порт, экономля трафик) это нормально?
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
16.01.2015, 21:23
Или я Вас не понимаю или Вы не до конца понимаете что делает бибилотека, и как происходит обмен данными в таких приложениях.
Конект на 80 порт не как не связан с количетсвом трафика, будь то 80, 1080, 10080 порт - это просто порт.
По дефолту 80 используется для HTTP сервера. Что на каком конце висит зависит от Вас

Под экономией трафика я имел ввиду то, что я не использую текстовый протокол.
Простой пример, можно взять жсон и договорится что пакет ыбудут такими
Code
1
{ event: "Event name", session_id: sId, data: User data }
и юзать хттп протокол, то для отправки пакета при установки конекта будет всякий мосор из HTTP плюс будет каждый раз информация о названии полей в жсон.
Для примера, в жсон вызов метода с авторизацией примерно так может выглядеть
Code
1
{ "event": "signIn", "session_id": "3244234432343234234", "data": { "username": "User", "password": "12345" } }
мы имеем 111 байт пакет, по мима этого ещё нул символ видимо в конце, ну пусть 112 не важно...
это не считая остального мусора,
В бинарном же протоколе он будет выглядеть так,
Code
1
2
3
4
5
6
7
[0x01][0x000d][0x04][User][0x05][12345]
1 байт опкод - метод
2 байта длинна данных в нашем случае число 13
2 байта длинна текста
4 байта текст
2 байта длинна текста
5 байт текст
имеем пакет 16 байт вместо 112, вот тут видно экономию.
Тут ни как номер порта не виляет

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

можно написать сервер и делать два вида ответов, в зависимости от того, веб сокеты или мобильное приложение подключилось.

Но я советую поизучать что такое протоколы, как происходит обмен данных, прежде чем начинать пистаь сервер, что бы потом всё не переделывать.

Добавлено через 2 минуты
ну да. там в жсон в данном примере сессион кей можно н считать, он будет слаться каждый раз только при лонг пулинге или аяксе, по веб сокетам 1 раз
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.01.2015, 21:24  [ТС]
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
о дефолту 80 используется для HTTP сервера. Что на каком конце висит зависит от Вас
ну я это и имел ввиду, не использовать json. Написал 80 порт, потому что все используют 80 для http
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
16.01.2015, 21:28
вы хотите сокет ио только в браузере использовать? или и в мобильнике?
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.01.2015, 21:41  [ТС]
в браузере, конечно
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
16.01.2015, 21:44
Цитата Сообщение от spydark91 Посмотреть сообщение
конечно
Почему так?) если делать на сервере в любом случае поддержку сокет.ио, то почему бы не сделать тогда и в мобильнике на сокет.ио?) Зачем делать два варианта протоколов общения?

Я не принуждаю к использованию сокет.ио в мобильнике, просто почему такое решение категоричное?
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.01.2015, 22:01  [ТС]
почему 2 то?)
в мобильнике те же сокеты, что и в браузере
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
16.01.2015, 22:10
Не понял, что 2?
И что значит те же сокеты что и в браузере?
В браузере с JS либо вообще нельзя использовать сокеты, либо веб сокеты, либо ещё что то, но не простые полноценные сокеты.
А вот в мобильнике как раз полноценные сокеты.

Так если вы считаете что в мобильнике те же сокеты что и в браузере, какой тогда вообще смысл пистаь что то свое под мобильник, если в браузере вы будите использовать сокет.ио? Ну вот отсюда и вопрос, почему вы не хотите оскет ио использовать в мобильнике?)

Вот что получается, вы хотите в браузере использовать сокет ио
Значит для сервера на Java вы будите реализовывать протокол взаимодействия с сокет.ио
В мобильнике по вашим словам такие же сокеты как и в браузере, то етсь не полноценные...
Получается что дальше у вас два пути:
1) в мобильнике писать протокол свой, тогда в сервере нужно делать два протокола, и в зависимости от клиента, использовать один или второй.
2) реализовать протокол такой же как в сервере вы сделали для браузера, тогда в сервере останется 1 протокол, что уменьшит количество кода и упростит сервер, но вы будите писать ту же библиотеку сокет.ио

Если вы хотите использовать 1 путь, то почему? Что вы хотите улучшить в том протоколе что уже в сокет ио есть?
Если второй, то тем более не понимаю, если оно написано, зачем писать то же самое?
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.01.2015, 22:21  [ТС]
я думал что веб сокеты ( веб сокеты - это же сокет.ио?) являются полноценными
а в чем они не полноценны?

Добавлено через 29 секунд
вообще, я думал о 2 пути)

Добавлено через 26 секунд
вообще, мб встрою браузер в приложение и не буду париться
вебкит всегда радовал

Добавлено через 4 минуты
Цитата Сообщение от spydark91 Посмотреть сообщение
вообще, мб встрою браузер в приложение и не буду париться
вебкит всегда радовал
да, так и сделаю
тогда вообще получится, что не надо писать и под андроид и под айос, только приложение, где есть браузер

Добавлено через 2 минуты
только приложение, где есть браузер
только приложение с браузером под каждую платформу
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
16.01.2015, 22:30
soket.io - библиотека! просто для кросбраузерности.
она пытается использовать различный транспорт для соединения с сервером: websocket, flashsocket, htmlfile, xhr-polling...
а сокет, это программный интерфейс, который позволяет данными обмениваться, есть различные слои сетевые... но как правило при использовании tcp сокета, вы пишите и читаете в него как и в обычный файл, ну почти вам нужно просто подключиться куда то и читать писать байты.

web socket это протокол поверх tcp socket, поддерживаемый далеко не во всех браузерах

слово полноценны не прям к веб сокетам нужно применять а к браузерам. то етсь не все браузере позволят это использовать.

почитайте книжку по сетевому программированию, когда поймете что такое сокет, что такое tcp socket И что такое web socket, будет понятней что такое протокол, и что делает socket.io, и что я пытаюсь у вас узнать

Хорошо, забудьте всё что я написал выше.

Можно пару строк кода Java сервера, что бы понять что вы хотите делать?
То есть как вы собираетесь слушать порт, какие сокеты использовать, в каком виде принимать и отправлять данные.
Пример в одном потоке, просто создание слушающего сокета, и приём отправку имени юзера.

Добавлено через 2 минуты
spydark91, простите за не скромный вопрос? а нахрена тогда вообще приложение?

Добавлено через 22 секунды
Браузер и так в каждой мобилке, етсь, вы хотите написать прсото браузер?)

Добавлено через 2 минуты
Тогда опять же вернёмся к вопросу, почему Java?)
если вы будиде под браузер пистаь на js значит вы его знаете, значит можете написать сервер на node.js
что гораздо быстрей и проще, с учетом того что сокет.ио писалось именно под него.
и я не думаю что ява более быстро работает или меньше жрёт памяти чем нод.жс, так почему Java?
1
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.01.2015, 22:41  [ТС]
да я понимаю что сокет.ио это библиотека)
но думал, что веб сокеты во всех браузерах поддерживаются, и что это, по сути, тоже самое, что и простые сокеты, только в браузере.
Да вот, простенький сервер.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
               ServerSocket serverSocket = new ServerSocket(777);
                while (true) {
                    final Socket socket = serverSocket.accept();
                    new Thread(new Runnable() {
                        public void run() {
                            try {
                                DataInputStream inputStream = new DataInputStream(socket.getInputStream());
                                DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());
                                // читаем, пишем
                                socket.close();
                            }
                            catch (IOException e) { }
                        }
                    }).start();
                }
потому что приложение удобнее для пользователей будет)
пока что у меня вопросов больше нет, вы необычайно мне помогли, большое спасибо)

Добавлено через 1 минуту
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
почему Java?
потому что я более менее понимаю как с ней работать))
конечно, надо познавать новое, но сейчас, как то не хочется node js изучать)
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
16.01.2015, 22:53
веб сокеты - это сокрее протокол.
который нужно реализовать ещё на стороне сревера.
то что вы показали на сервере - обычный tcp сокет.
который сам по себе будет принимать данные от веб сокетов как простой текст.
https://ru.wikipedia.org/wiki/WebSocket
Вам придёт что то типа
Code
1
2
3
4
5
6
7
8
9
10
GET /demo HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Key2: 4 @1 46546xW%0l 1 5
Host: example.com
Sec-WebSocket-Key1: 12998 5 Y3 1 .P00
Origin: http://example.com
WebSocket-Protocol: sample
 
^n:ds[4U
вы должны распарсить это, понять что от вас хотят, то есть что протокол 1.1 и что запрос идёт по адресу /demo
и нужно формировтаь ответы по тому же протоколу
Code
1
2
3
4
5
6
7
8
HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: http://example.com
Sec-WebSocket-Location: ws://example.com/demo
Sec-WebSocket-Protocol: sample
 
8jKS'y:G*Co,Wxa-
я и спрашиваю, вы всё это хотите ручками реализовывать?

Тот кусок что вы показали - с js не заработает, он просто набором байт будет принимать и отдовать, а самое весёлое что нет никакой гарантии сколько за 1 раз при чтении будет прочитано байт, то етсь вы можете за ра хи не получить все данные. Вы даже ен знаете соклько данных должно придти.
К тому же нужно делать неблокирующие сокеты, что бы если 1 клиент с медленным интернетом, другие просто не зависли.

Вам слишком рано начинать реализовывать свой протокол, или писать на tcp сокетах сервер для web сокетов. Но дело ваше, я например люблю учиться на поставленных перед собой задачах
Успехов в написании

Добавлено через 2 минуты
Цитата Сообщение от spydark91 Посмотреть сообщение
потому что я более менее понимаю как с ней работать))
Вам в этйо задаче не Java нужно понимать, а сети, что такое сокет, как они работают, что такое протокол, что такое асинхронные (неблокирующие) сокеты, как правильно получить/передать данные.

Открою сикрет, у меня 2 знакомых программиста сетевых, который не 1 год этим занимаются, и даже они столкнулись с проблемой чтения. Ибо юди думают что они написали read, recv,... и всё, они прочти всё что нужно, но это не так)) не зря функция возвращает количество байт прочитанных...

Добавлено через 57 секунд
А вот если вы этого всего ен знаете, то вам выход самый простой использовать что то готовое, socket,io, tornado web,...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.01.2015, 22:53

Падающий снег
Здравствуйте! При загрузке скрипта снежинки появляются по высоте окна браузера, потом летят до конца страницы. Хочу переделать, чтобы...

Падающий снег
Подскажите, пожалуйста, где я ошиблась. На форме программе должен отображаться падающий снег, как на рисунке. Почему-то у меня вообще...

Падающий текст
Добрый день! Как сделать падающий текст и изменение его скорости по нажатию на стрелку? Движение и позиция текста: void...

падающий квадрат
Помогите сделать падающий квадрат ) самый простой InitializeComponent(); public struct Size for (i = 0; i...

Падающий снег
Делаю падающий снег поверх картины. Как сделать так, что бы снежинки не оставляли за собой след?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru