2016-11-14 3 views
1

Я хочу создать функцию в моей системе, которая может отправлять и получать сообщение от одного пользователя другому в виде приглашения, например текстового поля, с сообщением «Хотите ли вы пойти со мной по магазинам? " и две кнопки в этом окне-сообщении «Принято», «Не принято».Автоматически вызывать новое сообщение из базы данных

Я уже могу сохранить приглашение в базе данных. Вот где он будет сохранен в БД/schema.rb под сообщением:

create_table "processings", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| 
    t.integer "shopping_process_id" 
    t.integer "shopping_list_id" 
    t.boolean "accepted" 
    t.datetime "responded" 
    t.string "message" 
    t.index ["shopping_list_id"], name: "index_processings_on_shopping_list_id", using: :btree 
    t.index ["shopping_process_id"], name: "index_processings_on_shopping_process_id", using: :btree 
    end 

Теперь я спрашиваю меня, как я могу построить функцию, которая автоматически вызывающую это сообщение для пользователя, который должен получить это сообщение, немедленно после того, как сообщение будет сохранено в базе данных. У вас есть идея, как я могу это реализовать?

ответ

1

Что вы запрашиваете - это сообщение, инициированное сервером - вы хотите, чтобы сервер отправил клиенту сообщение. Это не работает HTTP. С помощью HTTP вы отправляете запрос на сервер, и сервер отвечает. Так что ваши варианты:

а) Напишите функцию JavaScript, который отправляет запрос на сервер каждую минуту или каждые несколько секунд и работает асинхр (не рекомендуется)

или

б) Используйте WebSockets для создайте связь между сервером и пользователями, тем самым сможете отправлять, а также получать сообщения.

С веб-сокетами, с которыми у меня есть опыт, существует множество вариантов реализации. То, как я это делал, это использовать Rails 5 ActionCable, жемчужину «puma» (пума делает ваш сервер Rails потоком, который необходим ActionCable) и Redis. Это довольно хорошо link here о том, как реализовать Rails ActionCable для чата. Это шаг за шагом, вам просто нужно изменить его для своих нужд. У меня действительно есть фатальный недостаток, который я исправил.

This это мое исправление для github repo статьи выше. В приведенных выше статьях сообщения отправляются во все чаты, потому что автор не делает каждое соединение специфичным для одного чата, а вместо этого делает его специфичным для всех чатов. Трюк ActionCable гарантирует, что каждое соединение отправляет только правильную информацию каждому пользователю. Вы не хотите, чтобы все пользователи получали приглашение, поэтому вам нужно создавать соединения на основе идентификаторов пользователей или другого уникального идентификатора, а также отправлять подтверждения на основе этого.

Удачи вам!

Смежные вопросы